每天一学设计模式之抽象工厂模式

来源:互联网 发布:post请求传递json 编辑:程序博客网 时间:2024/04/25 13:35

 不好意思,昨天没有来得及学习,今天补上抽象工厂模式。

 抽象工厂方法,是一种比较常用的模式。

 Provide an interface for creating families of related or dependent objects without specifying their concrete classes.(为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类。)

 抽象工厂模式的通用类图:

下面来看一下抽象工厂模式的通用代码:

抽象产品类:

public abstract class AbstractProductA{      //通用方法      public void shareMethod(){          ...      }       //相同方法,不同处理实现      public abstract void doSomething();}
具体产品类A1:

public class ProductA1 extends AbstractProductA{      //相同方法,不同处理实现      public void doSomething(){          System.out.println("产品A1...");      } }

具体产品类A2:

public class ProductA2 extends AbstractProductA{      //相同方法,不同处理实现      public abstract void doSomething(){          System.out.println("产品A2...");      } }
可以像A类产品一样实现多个这样子的产品类,这里我们假设再实现了一个同样的B类产品类。我们再来看一下抽象工厂类的代码:

public abstract class AbstractFactory{      //生产A类产品,具体生产A1类产品还是A2类产品,在具体的工厂实现类中实现...       public abstract AbstractProductA createProductA();      //生产B类产品      public abstract AbstractProductB createProductB();    }
在抽象工厂类中根据产品类型的个数来定义产品生产线的个数。再来看一下具体的工厂实现类:

public class Factory1 extends AbstractFactory{      //生产A1类产品,具体生产A1类产品还是A2类产品,在具体的工厂实现类中实现...       public AbstractProductA createProductA(){ return new ProductA1();}      //生产B2类产品      public AbstractProductB createProductB(){ return new ProductB2();};    }
在这里可以根据需求实现具体工厂类,可以任意组合不同类型产品的不同类型实现。下面来看一下抽象工厂模式的优缺点:

优点:

     1.封装性,我们不需要去关注产品的实现,只需要去关注一下工厂类,关注工厂类可以生产怎么样的产品就可以了。

      2.产品类族之间的约束为非公开状态。产品A与产品B直接有什么样的约束关联,在工厂类中我们并不关注,即上层模块不用关心底层的实现和关联。

缺点:

     产品族扩展非常复杂。例如需要增加一个C产品,上述的代码需要修改的工作量会很大,更加复杂的场景就会带来更加巨大的工作量。

抽象工厂模式的试用场景:

  


0 0
原创粉丝点击