先了解一些簡單的概念:
工廠方法模式(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 原型模式 用原...