設計模式 建造者 原型模式

2021-10-04 15:04:39 字數 4038 閱讀 1098

建造者模式

使用多個簡單的物件一步一步構建成乙個複雜的物件。

我們假設乙個快餐店的商業案例,其中,乙個典型的**可以是乙個漢堡(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,並進行遞迴,這種方式比較繁瑣,通常我們使用一種簡便的方式 ...