日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

工厂方法 Factory Method

發(fā)布時間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 工厂方法 Factory Method 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

背景:有一個應用框架,它可以向用戶顯示多個文檔。在這個框架中,兩個主要的抽象是類Application和Document.這兩個類都是抽象的。客戶必須通過它們的子類來做與舉替應用相關的實現(xiàn)。

分析:因為被實例化的特定Document子類是與特定應用相關的,所iApplication類不可能預測到那個Document子類將被實例化一一Application類僅直到一個新的文檔何時應被創(chuàng)建,而不知道哪一種Document將被創(chuàng)建。這就產生了一個尷尬的局面框架必須實例化類,但是它只知道不能被實例化的抽象類。
延遲實例化一一工廠方法:

工廠方法模式定義了一個創(chuàng)建對象的接口,但由子類決定要實例化的類是哪一個。工廠方法讓類把實例化推遲到子類。

需求:使用框架開發(fā)一款Word應用程序。

1 namespace FactoryMethod 2 { 3 /// <summary> 4 /// 文檔抽象類,定義了文檔的一般操作接口 5 /// </summary> 6 public abstract class Document 7 { 8 public abstract void Open(); 9 public abstract void Close(); 10 public abstract void Save(); 11 public abstract void Revert(); 12 } 13 14 } 1 namespace FactoryMethod 2 { 3 /// <summary> 4 /// 文檔生產工廠,定義了生產文檔的接口 5 /// </summary> 6 public abstract class Application 7 { 8 public abstract Document CreateDocument(); 9 10 } 11 } using System;namespace FactoryMethod {public class Word:Document{public override void Close(){Console.WriteLine("關閉了一個Word文檔");}public override void Open(){Console.WriteLine("打開了一個Word文檔");}public override void Revert(){Console.WriteLine("恢復了一個Word文檔");}public override void Save(){Console.WriteLine("保存了一個Word文檔");}} } 1 namespace FactoryMethod 2 { 3 public class WordApp : Application 4 { 5 public override Document CreateDocument() 6 { 7 return new Word(); 8 } 9 } 10 } 1 using System; 2 3 namespace FactoryMethod 4 { 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 Application app = new WordApp(); 10 Document doc = app.CreateDocument(); 11 doc.Open(); 12 doc.Revert(); 13 doc.Save(); 14 doc.Close(); 15 Console.ReadKey(); 16 } 17 } 18 }

運行結果:

?

?新的需求:使用現(xiàn)有框架再開發(fā)一款Excel和PowerPoint應用程序。

分析:方法一:分別增加對應的工廠子類和產品子類即可。

方法二:參數化工廠,根據工廠接收的不同參數,返回不同的產品。(本人比較懶,這種方法要修改很現(xiàn)有多代碼,放棄)

方法三:使用泛型。

這里我就采用泛型了,泛型的好處是不言而喻的,一次編寫,永久使用,再多的產品使用這一個模板工廠就可以了。而且也不需要改變原有代碼。

1 namespace FactoryMethod 2 { 3 public class App<T> : Application where T : Document,new() 4 { 5 public override Document CreateDocument() 6 { 7 return new T(); 8 } 9 } 10 } 1 using System; 2 3 namespace FactoryMethod 4 { 5 class Excel:Document 6 { 7 public override void Close() 8 { 9 Console.WriteLine("關閉了一個Excel文檔"); 10 } 11 12 public override void Open() 13 { 14 Console.WriteLine("打開了一個Excel文檔"); 15 } 16 17 public override void Revert() 18 { 19 Console.WriteLine("恢復了一個Excel文檔"); 20 } 21 22 public override void Save() 23 { 24 Console.WriteLine("保存了一個Excel文檔"); 25 } 26 } 27 } 1 using System; 2 namespace FactoryMethod 3 { 4 public class PPT:Document 5 { 6 public override void Close() 7 { 8 Console.WriteLine("關閉了一個PPT文檔"); 9 } 10 11 public override void Open() 12 { 13 Console.WriteLine("打開了一個PPT文檔"); 14 } 15 16 public override void Revert() 17 { 18 Console.WriteLine("恢復了一個PPT文檔"); 19 } 20 21 public override void Save() 22 { 23 Console.WriteLine("保存了一個PPT文檔"); 24 } 25 } 26 }

?運行結果:

?

參考資料《Design Patterns》

轉載于:https://www.cnblogs.com/blackteeth/p/10217509.html

總結

以上是生活随笔為你收集整理的工厂方法 Factory Method的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。