建立型模式(一)

2021-08-29 07:52:01 字數 2404 閱讀 2924

先了解一些簡單的概念:

工廠方法模式(factory pattern)中,我們在建立物件時不會對客戶端暴露建立邏輯,並且是通過使用乙個共同的介面來指向新建立的物件。

抽象工廠模式(abstract factory pattern)是圍繞乙個超級工廠建立其他工廠。該超級工廠又稱為其他工廠的工廠。

那麼首先我們來看工廠方法模式:概念上說建立物件時不會對客戶端暴露建立的邏輯,這樣的好處很明顯,你不暴漏建立的邏輯,客戶端就不用去關心你的建立邏輯了,就可以直接呼叫了,同時擴充套件性也高(為什麼擴充套件性高我們待會看)。其實工廠方法模式就好像小商店和大廣場的感覺一樣,如果你住在郊區:你買菜要去菜市場,你買零食要去小商店,反正你要去很多地方,但是如果你住在購物廣場旁邊那就不一樣了,買啥都去這裡面溜達一下,大多數都能找到。所以說如果沒有工廠方法模式,你建立物件首先要知道這個物件是幹嘛的,不然就好像去菜市場買家具一樣,但是有了工廠方法模式,你只需要知道你要建立哪一類物件就可以了。

那如何來實現乙個工廠方法模式呢?既然是工廠,那首先這個工廠裡面要有一些東西,這些東西肯定就是物件了,而且這些物件都有乙個公共的介面(概念上說通過共同的介面只想新建立的物件)。所以我們要先定義乙個公共的介面:

inte***ce topinter
有了介面我們再去搞幾個物件出來:

class c1 implements topinter

}class c2 implements topinter

}

有了公共的介面,有了物件,那工廠就該出來了吧。 

class factorytop 

if (type.equalsignorecase("家具"))  else if (type.equalsignorecase("零食")) 

return null;}}

看懂了嗎?有了工廠方法模式,我們每次建了新的類之後,只需要在這個方法中加入乙個判斷返回新的例項就可以了,而不用像以往一樣,自己挨個的建立類,還有可能建立錯誤。這就是我們開始所說容易擴充套件。

抽象工廠模式:

抽象工廠模式,名字和工廠方法模式很像,都和工廠有關,那麼他們有什麼區別呢?抽象工廠模式,是對工廠進行抽象,也就是說

他是建立工廠的的工廠。就好比乙個總部的酒廠下面有很多分部的酒廠,這些分部的酒廠建立不同型號的酒。這個就是抽象工廠模式。概念上來說:

工廠方法建立 "一種" 產品,他的著重點在於"怎麼建立",也就是說如果你開發,你的大量**很可能圍繞著這種產品的構造,初始化這些細節上面。也因為如此,類似的產品之間有很多可以復用的特徵,所以會和模版方法相隨。 

抽象工廠需要建立一些列產品,著重點在於"建立哪些"產品上,也就是說,如果你開發,你的主要任務是劃分不同差異的產品線,並且盡量保持每條產品線介面一致,從而可以從同乙個抽象工廠繼承。

如果我描述的還是很晦澀,那麼我希望下面這個例子能幫到你:

在上面我們建立了乙個topinter的介面,他的下面有兩個類分別是c1和c2。現在我們再建立乙個介面secinter和他的兩個實現類s1和s2

inte***ce secinter

class s1 implements secinter

}class s2 implements secinter

}

然後我們來寫抽象工廠類:

abstract class factorytop
既然抽象工廠是建立工廠的工廠,那麼實現這個抽象類的類肯定也是工廠,只不過這些工廠所做的事情有所區別:

class top extends factorytopelse 

}@override

secinter getsec(string s) 

}class sec extends factorytop

@override

secinter getsec(string s) else }}

抽象工廠類有了,工廠類也有了,那麼我們怎麼去獲取工廠呢?這就需要我們提供乙個生產商,讓他們給你生產出來你想要的工廠:

建立型模式 原型模式

使用原型例項指定建立物件的種類,並且通過轉殖這些原型建立新的物件 原理是將乙個原型物件傳給要發動建立的物件,該物件通過請求原型物件轉殖自己來建立過程 轉殖方法 public prototype clone jdk中為我們提供了轉殖的方法clone 從object繼承下來,乙個物件要實現轉殖,需要實現...

建立型模式 原型模式

原型 prototype 模式主要用於建立物件的轉殖,通常其最簡單的形式就是採用自定 clone 函式並 傳入物件引數以返回此物件的乙個副本,這在 python 實作上可使用內定 copy.cop y 或 copy.deepcopy 函式來達到此目的。當已有乙個物件但對此物件的某些部分會被變更卻又想...

原型模式 建立型模式

文章首發個人部落格 如果我們有乙個類 sheep 它裡面有兩個屬性,名稱 name 年齡 age 現在我們有乙個它的例項 s1 我們需要按照這個例項的屬性再去建立兩個物件。1 sheep data public class sheep 2 main public class main 原型模式 用原...