抽象工厂模式

2016-12-28  本文已影响5人  无人之境215

抽象工厂模式

介绍

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

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

与工厂模式区别

实例

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

模型

设计模式-抽象工厂模式.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();
    }
}

优缺点

上一篇 下一篇

猜你喜欢

热点阅读