Abstract Factory

创建一组相关的产品。

1)Abstract Factory Class:创建一组产品的接口

2)Concrete Factory:继承Abstract Factory;实际过程中一个具体的工厂只需要创建一次,考虑Singleton

3)IProduct:一类产品的接口

4)Concrete Product:继承Iproduct。

5)Client:只包含AbstractFactory和IProduct的引用,不知道ConcreteFactory和ConcreteProduct的存在。

 

public abstract class AbstractFactory

{

   public abstract IProduct1 CreateProduct1();

   public abstract IProduct2 CreateProduct2();

}

 

 

interface IProduct1 {string GetName();}

public class Product1 : IProduct1 {public string GetName() {return "this is product 1";}}

 

 

interface IProduct2 {string GetName();}

public class Product2 : IProduct1 {public string GetName() {return "this is product 2";}}

 

public sealed class ConcreteFactory : AbstractFactory

{

private static ConcreteFactory _instance = new ConcreteFactory();   

public ConcreteFactory GetInstance()

{

   if (_instance == null)

     _instance = new ConcreteFactory(); 

   return _instance;

}

  private ConceteFactory(){} 

  public override IProduct1 CreateProduct1() { return new Product1();}

  public override IProduct2 CreateProduct2() { return new Product2();}

}

//Client call.
AbstractFactory concreteFacory1 = new ConcreteFactory();
IProduct1 product1 = concreteFacory1.CreateProduct1();
IProduct1 product2 = concreteFacory1.CreateProduct2();
优缺点:
1.分离了具体的类;工厂封装了创建产品的责任和过程;
2.有利于产品的一致性:一个系列的产品对方设计在一起工作时,只能使用同一个系列的对象,这一点很重要。
3.难支持新的产品;如果要支持,则需要扩张接口,以及所有实现该接口的子类。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值