建造者模式
使用多個簡單的物件一步一步構建成乙個複雜的物件。
我們假設乙個快餐店的商業案例,其中,乙個典型的**可以是乙個漢堡(burger)和一杯冷飲(cold drink)。漢堡(burger)可以是素食漢堡(veg burger)或雞肉漢堡(chicken burger),它們是包在紙盒中。冷飲(cold drink)可以是可口可樂(coke)或百事可樂(pepsi),它們是裝在瓶子中。
我們將建立乙個表示食物條目(比如漢堡和冷飲)的
item
介面和實現
item
介面的實體類,以及乙個表示食物包裝的
packing
介面和實現
packing
介面的實體類,漢堡是包在紙盒中,冷飲是裝在瓶子中。
然後我們建立乙個
meal
類,帶有
item
的 arraylist
和乙個通過結合
item
來建立不同型別的
meal
物件的
mealbuilder
。builderpatterndemo
,我們的演示類使用
mealbuilder
來建立乙個
meal。
步驟1,建立表示事物條目和事物包裝的介面。
食物條目item介面
public inte***ce
item
食物包裝介面
public inte***ce
packing
步驟2 建立實現packing介面的實體類(包裝方法,紙包裝或瓶子)
用紙包裝的packing實現類
public classimplements
packing }
用瓶子包裝的packing實現類
public class
bottleimplements
packing }
步驟3實現食物條目的抽象類(2種食物,即漢堡和可樂)
實現食物條目錄的抽象類 漢堡的 包裝方法以及**
public abstract class
burgerimplements
item
@override
public abstract float
price();}
可樂的實現抽象類 瓶子和**
public abstract class
colddrinkimplements
item
@override
public abstract float
price();}
步驟4 擴充套件抽象類(完成每一種食物的子類的實現類)
雞肉漢堡實現類。
public class
chickenburgerextends
burger
@override
public float
price() }
素食漢堡實現類
public class
vegburgerextends
burger
@override
public float
price() }
可口可樂實現類
public class
cokeextends
colddrink
@override
public float
price() }
百事可樂實現類
public class
pepsiextends
colddrink
@override
public float
price() }
步驟5建立乙個meal類
建立乙個食物目錄條建立類,**建立
public class
meal
public float
getcost()
return
cost;
}public void
showitems()}}
步驟6 建立乙個mealbuilder類,builder類負責建立meal物件
用來建立**的搭配
public class
mealbuilder
public
meal preaparenonvegmeal()}
步驟7 使用
public class
builderpartterndemo }
原型模式(prototype pattern)
用於建立重複的物件,同時又能保證效能。
實現乙個原型介面,該介面用於建立當前物件的轉殖。當建立物件代價較大時,則採用這種模式。例如,乙個物件需要在乙個高代價的資料庫實現操作之後被建立。我們可以快取該物件,在下乙個請求返回它的轉殖,在需要是更新資料庫,以此來減少資料庫呼叫。
步驟1實現 cloneable介面
public abstract class
shapeimplements
cloneable
public
string getid()
public void
setid(string id)
public
object clone()catch
(clonenotsupportedexception e)
return
clone;}}
步驟2擴充套件抽象類的實體類(2個)
public class
rectangleextends
shape
public
rectangle()}
public class
squareextends
shape
public
square()}
步驟3建立乙個類,從資料庫獲取實體類,並把它們儲存在乙個hashtable中
public class
shapecache
//對每種形狀都執行資料庫查詢,並建立該形狀
//例如,我們要新增形狀
public static void
loadcache()}
步驟4 使用
public static void
main(string args)
設計模式 單例模式 建造者模式 原型模式
通常我們讓乙個全域性變數使得乙個物件被訪問,但它不能防止你例項化多個物件。乙個最好的辦法就是,讓類自身負責八寸他的唯一例項。這個類可以保證沒有其他例項可以被建立,並且它可以提供乙個訪問該例項的方法。單例模式 singletion 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。這裡寫描述 優...
設計模式 建立型模式 建造者模式
設計模式 建立型模式 建造者模式 建造者模式即生成器模式,將乙個複雜的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。如下 產品類 public class product 抽象建造者 public abstract class builder 具體的建造 public class con...
設計模式系列 原型 建造者
原型模式與建造者模式都屬於建立型的模式,也是比較常見的模式。原型模式常常用於複雜物件的複製,常常將需要用到原型模式的類設計成 cloneable,這種方式實現的是淺轉殖。如果需要實現深轉殖,則需要將其成員對應的類也設計成 cloneable,並進行遞迴,這種方式比較繁瑣,通常我們使用一種簡便的方式 ...