一,
結構
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
抽象工廠(Abstract Factory)角色: 擔任這個角色的是工廠方法模式的核心,它是與應用系統商業邏輯無關的。
具體工廠(Concrete Factory)角色: 這個角色直接在客戶端的調用下創建產品的實例。這個角色含有選擇合適的產品對象的邏輯,而這個邏輯是與應用系統的商業邏輯緊密相關的。
抽象產品(Abstract Product)角色: 擔任這個角色的類是工廠方法模式所創建的對象的父類,或它們共同擁有的接口。
具體產品(Concrete Product)角色: 抽象工廠模式所創建的任何產品對象都是某一個具體產品類的實例。這是客戶端最終需要的東西,其內部一定充滿了應用系統的商業邏輯。
?
二,示例代碼
public interface AbstractFactory { public AbstractProductA CreateProductA(); public AbstractProductB CreateProductB(); } public class ConcreteFactory1 implements AbstractFactory { public AbstractProductA CreateProductA() { return new ProductA1(); } public AbstractProductB CreateProductB() { return new ProductB1(); } } public class ConcreteFactory2 implements AbstractFactory { public AbstractProductA CreateProductA() { return new ProductA2(); } public AbstractProductB CreateProductB() { return new ProductB2(); } } public interface AbstractProductA { } public interface AbstractProductB { } public class ProductA1 implements AbstractProductA { } public class ProductB1 implements AbstractProductB { public void Interact( AbstractProductA a ) { Console.WriteLine( this + " interacts with " + a ); } } // "ProductA2" class ProductA2 : AbstractProductA { } // "ProductB2" class ProductB2 : AbstractProductB { // Methods override public void Interact( AbstractProductA a ) { Console.WriteLine( this + " interacts with " + a ); } } // "Client" - the interaction environment of the products class Environment { // Fields private AbstractProductA AbstractProductA; private AbstractProductB AbstractProductB; // Constructors public Environment( AbstractFactory factory ) { AbstractProductB = factory.CreateProductB(); AbstractProductA = factory.CreateProductA(); } // Methods public void Run() { AbstractProductB.Interact( AbstractProductA ); } } /**//// <summary> /// ClientApp test environment /// </summary> class ClientApp { public static void Main(string[] args) { AbstractFactory factory1 = new ConcreteFactory1(); Environment e1 = new Environment( factory1 ); e1.Run(); AbstractFactory factory2 = new ConcreteFactory2(); Environment e2 = new Environment( factory2 ); e2.Run(); } }
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
