抽象工厂模式
来源:互联网 发布:自学办公软件视频教程 编辑:程序博客网 时间:2024/06/08 11:56
抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据里氏替换原则,任何接受父类型的地方,都应当能够接受子类型。
Java
Creator
public interface Creator { public ProductA factoryA(); public ProductB factoryB();}
ConcreteCreator
public class ConcreteCreator1 implements Creator{ @Override public ProductA factoryA() { return new ProductA1(); } @Override public ProductB factoryB() { return new ProductB1(); }}public class ConcreteCreator2 implements Creator{ @Override public ProductA factoryA() { return new ProductA2(); } @Override public ProductB factoryB() { return new ProductB2(); }
Product
public interface ProductA { void show();}public interface ProductB { void show();}
ConcreteProduct
public class ProductA1 implements ProductA { @Override public void show() { System.out.println("ProductA1"); }}public class ProductA2 implements ProductA { @Override public void show() { System.out.println("ProductA2"); }}public class ProductB1 implements ProductB { @Override public void show() { System.out.println("ProductB1"); }}public class ProductB2 implements ProductB { @Override public void show() { System.out.println("ProductB2"); }}
Client
public class Client { public static void main(String[] args) { Creator creator1 = new ConcreteCreator1(); creator1.factoryA().show(); creator1.factoryB().show(); Creator creator2 = new ConcreteCreator2(); creator2.factoryA().show(); creator2.factoryB().show(); }}
C井
Creator
public interface Creator { ProductA factoryA(); ProductB factoryB(); }
ConcreteCreator
public class ConcreteCreator1 : Creator { public ProductA factoryA() { return new ProductA1(); } public ProductB factoryB() { return new ProductB1(); } } public class ConcreteCreator2 : Creator { public ProductA factoryA() { return new ProductA2(); } public ProductB factoryB() { return new ProductB2(); } }
Product
public interface ProductA { void show(); } public interface ProductB { void show(); }
ConcreteProduct
public class ProductA1 : ProductA { public void show() { Console.WriteLine("ProductA1"); } }public class ProductA2 : ProductA { public void show() { Console.WriteLine("ProductA2"); } public class ProductB1 : ProductB { public void show() { Console.WriteLine("ProductB1"); } }public class ProductB2 : ProductB { public void show() { Console.WriteLine("ProductB2"); } }
Client
public static void Main(string[] args) { Creator creator1 = new ConcreteCreator1(); creator1.factoryA().show(); creator1.factoryB().show(); Creator creator2 = new ConcreteCreator2(); creator2.factoryA().show(); creator2.factoryB().show(); Console.ReadLine(); }
C艹
Product
class ProductA{public: virtual void show() = 0;};class ProductB{public: virtual void show() = 0;};
ConcreteProduct
class ProductA1 : public ProductA{public: virtual ~ProductA1() {}; virtual void show() { cout << "ProductA1" << endl; };};class ProductA2 : public ProductA{public: virtual ~ProductA2() {}; virtual void show() { cout << "ProductA2" << endl; };};class ProductB1 : public ProductB{public: virtual ~ProductB1() {}; virtual void show() { cout << "ProductB1" << endl; };};class ProductB2 : public ProductB{public: virtual ~ProductB2() {}; virtual void show() { cout << "ProductB2" << endl; };};
Creator
class Creator{public: virtual ProductA* factoryA() = 0; virtual ProductB* factoryB() = 0;};
ConcreteCreator
class ConcreteCreator1 : public Creator{public: virtual ~ConcreteCreator1() {}; virtual ProductA* factoryA() { return new ProductA1; }; virtual ProductB* factoryB() { return new ProductB1; };};class ConcreteCreator2 : public Creator{public: virtual ~ConcreteCreator2() {}; virtual ProductA* factoryA() { return new ProductA2; }; virtual ProductB* factoryB() { return new ProductB2; };};
Client
int main(){ Creator* creator1 = new ConcreteCreator1; ProductA* productA1 = creator1->factoryA(); productA1->show(); delete productA1; ProductB* productB1 = creator1->factoryB(); productB1->show(); delete productB1; delete creator1; Creator* creator2 = new ConcreteCreator2; ProductA* productA2 = creator1->factoryA(); productA2->show(); delete productA2; ProductB* productB2 = creator1->factoryB(); productB2->show(); delete productB2; delete creator2; system("pause"); return 0;}
0 0
- 工厂模式 -- 抽象工厂
- 工厂模式-抽象工厂
- 工厂模式-抽象工厂
- 工厂模式/抽象工厂模式
- 工厂模式&&抽象工厂模式
- 工厂模式---抽象工厂模式
- 工厂模式&抽象工厂模式
- 工厂模式,抽象工厂模式
- 【模式】抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 工厂方法,抽象工厂模式
- 2,工厂模式--抽象工厂
- C#工厂模式-抽象工厂
- 工厂模式与抽象工厂
- 抽象工厂设计模式
- 抽象工厂模式
- 大数据_Storm_Storm集群的搭建
- Linux系统应用管理方法探究
- KafKa基于Zookeeper集群安装
- 生无可恋
- springMVC 事物配置的5种方式
- 抽象工厂模式
- C# ~ NUnit单元测试
- 扫描二维码下载app
- 基于keepalived和ServiceStack.Redis组件的redis链接分析
- Java enum的用法详解
- HDU 5600 N bulbs(机智)
- java常见面试题及答案
- ZOJ 1877 Bridge(贪心)
- Socket相关收集