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