Abstract Factory

来源:互联网 发布:linux mount无权限 编辑:程序博客网 时间:2024/06/06 14:28

创建一组相关的产品。

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.难支持新的产品;如果要支持,则需要扩张接口,以及所有实现该接口的子类。