《研磨设计模式》chap9 原型模式Prototype
生活随笔
收集整理的這篇文章主要介紹了
《研磨设计模式》chap9 原型模式Prototype
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
場景:訂單拆分1000份,然后還有兩種訂單:個人和公司的。
1. 常規解決
/*** 訂單的接口*/ public interface OrderApi {/*** 獲取訂單產品數量* @return 訂單中產品數量*/public int getOrderProductNum();/*** 設置訂單產品數量* @param num 訂單產品數量*/public void setOrderProductNum(int num); }/*** 企業訂單對象*/ public class EnterpriseOrder implements OrderApi{ private int orderProductNum = 0;public int getOrderProductNum() {return this.orderProductNum;} public void setOrderProductNum(int num) {this.orderProductNum = num;} public String toString(){return "本企業訂單的訂購企業是="+this.enterpriseName+",訂購產品是="+this.productId+",訂購數量為="+this.orderProductNum;} }public class OrderBusiness { public void saveOrder(OrderApi order){//1:判斷當前的預定產品數量是否大于1000while(order.getOrderProductNum() > 1000){ //2.1再新建一份訂單,跟傳入的訂單除了數量不一樣外,其他都相同OrderApi newOrder = null;if(order instanceof PersonalOrder){//創建相應的新的訂單對象PersonalOrder p2 = new PersonalOrder();//然后進行賦值,但是產品數量為1000PersonalOrder p1 = (PersonalOrder)order; p2.setOrderProductNum(1000);//然后再設置給newOrdernewOrder = p2;}else if(order instanceof EnterpriseOrder){ } //2.2原來的訂單保留,把數量設置成減少1000order.setOrderProductNum(order.getOrderProductNum()-1000); }public static void main(String[] args) {//創建訂單對象,這里為了演示簡單,直接new了PersonalOrder op = new PersonalOrder();//設置訂單數據op.setOrderProductNum(2925);//這里獲取業務處理的類,也直接new了,為了簡單,連業務接口都沒有做OrderBusiness ob = new OrderBusiness(); ob.saveOrder(op);}2. 原型模式
3. 改寫示例
4. 總結
原型模式的本質:克隆生成對象.
原型模式的功能:
深拷貝:除了淺拷貝要克隆的值外,還負責克隆引用類型的數據
淺拷貝:只負責克隆按值傳遞的數據(比如基本數據類型,String類型)
原型管理器:
如果一個系統中原型的數目不固定,比如系統中的原型可以被動態地創建和銷毀,那么就需要在系統中維護一個當前可用的原型的注冊表,這個注冊表被稱為原型管理器。
總結
以上是生活随笔為你收集整理的《研磨设计模式》chap9 原型模式Prototype的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《研磨设计模式》chap11 代理pro
- 下一篇: 《研磨设计模式》chap20 享元模式