工廠模式和抽象工廠模式

2021-10-07 13:24:25 字數 3305 閱讀 7193

當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...