今天俺要说一说工厂方法模式(Factory)
前言;工廠方法模式又叫做工廠模式,它是23個(gè)設(shè)計(jì)模式中的一個(gè),它解決的還是在軟件設(shè)計(jì)中創(chuàng)建對(duì)象的問題,它可以更好的解決用戶需求的變化.
問題;在簡(jiǎn)單工廠模式中,我們將實(shí)例化的對(duì)象全部放于Factory.cs(工廠類),在我們的預(yù)知下我們可以實(shí)例化對(duì)象,但是我們的預(yù)知是有限的,而客戶的需求是無限的,這樣就出現(xiàn)了問題,一但客戶的需求過于復(fù)雜,我們就要修改源碼了,這是設(shè)計(jì)模式不允許的.
定義:在工廠模式中,父類負(fù)責(zé)定義創(chuàng)建對(duì)象的接口,子類負(fù)責(zé)new具體對(duì)象。
?
現(xiàn)實(shí)中的例子:我們舉一個(gè)例子,這個(gè)例子和簡(jiǎn)單工廠的例子有些不同。
據(jù)說清朝有個(gè)皇帝,它非常奢侈,每個(gè)衣服都有一個(gè)宮女負(fù)責(zé),這樣一來,每增加一種衣服,就得多出一個(gè)宮女,但她們各付其職,互不影響。? ?
?
分析:實(shí)現(xiàn)的功能,可以根據(jù)皇帝的需求,創(chuàng)建宮女去拿所對(duì)應(yīng)的衣服,如果皇帝太奢侈,這種衣服還沒有,只需要添加一個(gè)宮女就可以滿足他的需求了,每個(gè)宮女只要有一種衣服即可(高內(nèi)聚),要增加衣服,對(duì)于原來宮女和衣服來說,誰都不影響誰。
?
商品系列
?
?商品接口ICoat.cs
public interface ICoat {void ShowCoat();}
具體商品:商務(wù)上衣
public class BusinessCoat : ICoat{public void ShowCoat(){Console.Write("這件是商務(wù)上衣");//throw new NotImplementedException(); }}具體商品:時(shí)尚上衣
public class BusinessFactory : IFactory{public ICoat CreateCoat(){return new BusinessCoat();///throw new NotImplementedException();}}
下面是工廠系列
總廠房:
public interface IFactory{ICoat CreateCoat();}時(shí)尚上衣工廠
public class FashionFactory : IFactory{public ICoat CreateCoat(){return new FashionCoat();}}商務(wù)上衣工廠
public class BusinessFactory : IFactory{public ICoat CreateCoat(){return new BusinessCoat();///throw new NotImplementedException(); }}?
皇帝:
static void Main(string[] args){BusinessCoat coat = new BusinessCoat();coat.ShowCoat();Console.ReadLine();} 架構(gòu)圖:?
工廠方法模式使用繼承自抽象工廠角色的多個(gè)子類來代替簡(jiǎn)單工廠模式中的“上帝類”。正如上面所說,這樣便分擔(dān)了對(duì)象承受的壓力;而且這樣使得結(jié)構(gòu)變得靈活 起來——當(dāng)有新的產(chǎn)品產(chǎn)生時(shí),只要按照抽象產(chǎn)品角色、抽象工廠角色提供的合同來生成,那么就可以被客戶使用,而不必去修改任何已有的代 碼。可以看出工廠角色的結(jié)構(gòu)也是符合開閉原則的! ? 缺點(diǎn):添加一個(gè)產(chǎn)品就要添加一個(gè)工廠類,這使程序的架構(gòu)非常負(fù)責(zé),從而使系統(tǒng)閱讀起開非常困難。轉(zhuǎn)載于:https://www.cnblogs.com/ZaraNet/p/9563776.html
總結(jié)
以上是生活随笔為你收集整理的今天俺要说一说工厂方法模式(Factory)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BZOJ2299 HAOI2011向量(
- 下一篇: Linux中设置vi编辑器的编码格式以及