C#設計模式——Factory 方法模式(Factory Method Pattern)

來源:互聯網
上載者:User

一、概述
在軟體系統中,經常面臨著“某個對象”的建立工作,由於需求的變化,這個對象的具體實現經常面臨著劇烈的變化,但是它卻擁有比較穩定的介面。如何應對這種變化?如何提供一種封裝機制來隔離出“這個易變對象”的變化,從而保持系統中“其它依賴該對象的對象”不隨著需求的改變而改變?這就可以用到Factory 方法模式了。
二、Factory 方法模式
Factory 方法模式定義了一個用於建立對象的介面,讓其子類決定執行個體化哪一個對象。使一個對象的建立工作延遲到其子類。
Factory 方法模式的結構圖如下:

 

 

Product定義了Factory 方法所建立的對象的介面。
ConcreteProduct實現Product介面, 定義了具體對象。
Creator定義了具體對象建立的Factory 方法,該方法返回一個Product類型的對象。Creator也可以定義一個Factory 方法的預設實現,它返回一個預設的ConcreteProduct對象
ConcreteCreator實現Creator介面,重定義Factory 方法以返回一個ConcreteProduct執行個體。
三、樣本
我們以實現一個文檔處理系統來看一下Factory 方法模式的應用。
首先定義文件類型的介面和兩個具體的文件類型

 1     public interface IFile 2     { 3         void New(); 4         void Save(); 5     }  6     public class DocFile : IFile 7     { 8         public void New() 9         {10             Console.WriteLine("New Doc Create");11         }12         public void Save()13         {14             Console.WriteLine("Save Doc");15         }16     }17     public class TxtFile : IFile18     {19         public void New()20         {21             Console.WriteLine("New Txt Create");22         }23         public void Save()24         {25             Console.WriteLine("Save Txt");26         }27     }
複製代碼

接著實現對象建立的Factory 方法及具體文檔的建立工廠

 1     interface IFileFactory 2     { 3         IFile Create(); 4     } 5     public class DocFileFactory : IFileFactory 6     { 7         public IFile Create() 8         { 9             return new DocFile();10         }11     }12     public class TxtFileFactory : IFileFactory13     {14         public IFile Create()15         {16             return new TxtFile();17         }18     }
複製代碼

最後看一下如何調用

 1     static void Main(string[] args) 2     { 3         IFile docFile = (new DocFileFactory()).Create(); 4         docFile.New(); 5         docFile.Save(); 6         IFile txtFile = (new TxtFileFactory()).Create(); 7         txtFile.New(); 8         txtFile.Save(); 9         Console.ReadLine();10     } 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.