美文网首页
抽象工厂模式

抽象工厂模式

作者: 无人之境215 | 来源:发表于2016-12-28 23:29 被阅读5次

抽象工厂模式

介绍

为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

与工厂模式区别

  • 工厂模式针对的是一个产品等级结构,而抽象工厂模式则是针对的多个产品等级结构,也就是说,工厂模式提供的所有产品都是衍生自同一个接口或抽象类,而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类。

  • 抽象工厂模式所提供的一系列产品就组成一个产品族,而工厂方法提供的一系列产品为一个等级结构

实例

应用工厂本身就是一个抽象工厂,有多个产品等级结构,衍生自不同的接口或抽象类。

模型

设计模式-抽象工厂模式.JPG

使用方法

  • 创建接口
interface IProductA{
  public void function();
}

interface IProductB{
  public void function();
}
  • 创建实现接口的实体类
class ProductA1 implements IProductA{
  public void function() {
  }
}

class ProductA2 implements IProductA{
  public void function() {
  }
}

class ProductB1 implements IProductB{
  public void function() {
  }
}

class ProductB2 implements IProductB{
  public void function() {
  }
}
  • 创建抽象工厂
abstract class Factory1{
  abstract IProductA getProductA1();
  abstract IProductB getProductB1();
}

abstract class Factory2{
  abstract IProductA getProductA2();
  abstract IProductB getProductB2();
}
  • 创建具体工厂来生产相关产品
class ConcreteFactory1 extends Factory1{
  public IProductA getProductA1() {
    return new ProductA1();
  }
  public IProductB getProductB1() {
    return new ProductB1();
  }
}

class ConcreteFactory2 extends Factory2{
  public IProductA getProductA2() {
    return new ProductA2();
  }
  public IProductB getProductB2() {
    return new ProductB2();
  }
}
  • 客户端根据需要获取产品实例
public class Client{
    public void getProductInstance(){
        Factory1 factory1 = new ConcreteFactory1();
        IProductA productA1 = factory1.getProductA1();
        IProductB productB1 = factory1.getProductB1();

        productA1.function();
        productB1.function();

        Factory2 factory2 = new ConcreteFactory2();
        IProductA productA2 = factory2.getProductA2();
        IProductB productB2 = factory2.getProductB2();
        productA2.function();
        productB2.function();
    }
}

优缺点

  • 优点:符合开闭原则,可以在类的内部对产品族进行约束,当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
  • 缺点:每增加一个产品,相应的也要增加一个子工厂,加大了额外的开发量

相关文章

网友评论

      本文标题:抽象工厂模式

      本文链接:https://www.haomeiwen.com/subject/idjuvttx.html