當client不知道要建立哪乙個具體類的例項,或者不想在client**中指明要具體建立的例項;換句話說就是計畫在不同條件下建立不同的例項。在這種情況下,適合使用個工廠模式。
工廠模式可以視作是乙個虛擬的構造器,主要思路是定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。
工廠模式的大致框架如下:(其中不同的concrete為不同的構造方法,product為具體構造的例項)
//常規情況下,client直接建立例項物件
product p=
newproductone()
;//工廠模式下
product p=
newconcreteone.makeobject()
;
問題背景:給定乙個商店shop1和其分店shop2,兩家店鋪銷售的商品相同,假設為merchandise1和merchandise2。模擬在兩家店鋪購買商品。首先建立抽象產品類和兩個具體產品的子類。
abstract
class
merchandise
public
class
merchandise1
extends
merchandise
@override
public
void
show()
...}
public
class
merchandise2
extends
merchandise
@override
public
void
show()
...}
接下來建立商店類
abstract
class
shop
public
class
shop1
extends
shop
@override
public
void
delete
(merchandise m)
}public
class
shop2
extends
shop
@override
public
void
delete
(merchandise m)
}
然後建立工廠類。
inte***ce
factory
public
class
factory1
implements
factory
else
if(number.
equals
("2"))
...}
...}
除了使用介面+子類的工廠模式,還可以使用靜態工廠的模式。
public
class
factory1
else
if(number.
equals
("2"))
...}
...}
最後就是在client通過工廠類建立商店
public
class
client
當乙個系統的產品有多於乙個的產品族,而系統只消費其中某一族的產品時,可以使用抽象工廠模式。抽象工廠模式的大致思路是提供介面建立一組相關/相依賴的物件,且無需指明其具體類。
抽象工廠模式的大致框架:
首先建立的是兩個作業系統的介面和相應的具體類(兩個)。
//windows系統
public
inte***ce
windows
public
class
wqqimplements
windows
@override
public
void
modify
(string s)
}public
class
wwechat
implements
windows
@override
public
void
modify
(string s)
}//mac os 作業系統
public
inte***ce
macpublic
class
mqqimplements
window mac
@override
public
void
modify
(string s)
}public
class
mwechat
implements
mac@override
public
void
modify
(string s)
}
接下來定義抽象工廠介面和具體工廠類,,具體工廠類分別是qq和wechat在windows和mac作業系統下的建立。
public
inte***ce
abstractfactory
public
class
factory1()
}public
class
factory2()
}
建立乙個輔助類用於delegate到抽象工廠類,最後在client建立例項。
public
class
builder
}public class client
else
if(input.nextline.
equals
("wechat"))
... builder.
build
(factory)
;}
抽象工廠模式 抽象工廠模式
抽象工廠模式其實是圍繞了乙個超級工廠建立其他的工廠 可參考工廠模式 這個超級工廠又可以想像成是其他工廠的工廠,這種設計模式是一種建立型模式。在抽象工廠模式中,介面是負責建立乙個相關物件的工廠,不需要顯式指出其類。每個生成的工廠都能按照工廠模式提供物件。意圖提供乙個建立一系列相關或相互依賴物件的介面,...
工廠模式 抽象工廠模式
這裡使用簡單的話來講解工廠模式,不涉及程式設計 什麼是工廠模式呢?我的理解是對抽象介面例項的封裝。假如有乙個介面,有若干的實現類,代表不同的例項。傳統產生物件的方法是直接new乙個出來,對於每個例項都要new,當實現介面的類較多時會很麻煩,並且類的實現也暴露出來了。工廠模式是一種產生物件的模式,使用...
工廠模式 抽象工廠模式
子類父類代換 場景 在不同的條件下,需要建立不同的實現子類時。如網路通訊可以使用tcp udp。可以實現同乙個介面,通過工廠類根據條件 tcp或udp 來例項化不同的子類。這些子類符合黎克特制代換原則。public inte ce tlprotocol public class tcpimpleme...