抽象工厂模式

Posted ddsl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象工厂模式相关的知识,希望对你有一定的参考价值。

设计模式

三、抽象工厂模式

主要解决:简单工厂升级版,适合产品有多于一个的产品族,而系统只消费其中某一族的产品。

优点:

  1. 多个产品一起工作,可以使用同一产品对象

  2. 易于对产品横向升级

缺点:产品族难扩展,需要修改抽象工厂及其实现

UML类图

技术图片

实现:

*注:抽象产品工厂模式不利于产品的纵向增加,例如增加productC,需要修改工厂抽象类以及其实现;方便产品的横向升级,例如增加 3类 AB产品,只需要增加3类产品类,实现抽象工厂接口即可

// 工厂抽象类 用于创建产品组里所有产品  *不易于扩展其他产品
public interface AbstractFactory {
   Product createProductA();
   Product createProductB();
}
// 产品抽象类 约定产品公用属性以及方法
public interface Product {
    void doSomething();
}
/**
 * 产品创造工厂
 * 此处实验约定 产品工厂1 生产类型1的 A、B 产品
 *  产品工厂2 生产类型2的 A、B 产品
 */
// 产品工厂1
public class Product1Factory implements AbstractFactory {
    @Override
    public Product createProductA() {
        return new ProductA_1();
    }
    @Override
    public Product createProductB() {
        return new ProductB_1();
    }
}
// 产品工厂2
public class Product2Factory implements AbstractFactory {
    @Override
    public Product createProductA() {
        return new ProductA_2();
    }
    @Override
    public Product createProductB() {
        return new ProductB_2();
    }
}
// A产品抽象类类 这里也可直接实现产品接口,实现具体产品
public abstract class ProductA implements Product {
    public abstract void doSomething();
}
?
// 1类 A产品
public class ProductA_1 extends ProductA {
    @Override
    public void doSomething() {
        System.out.println("ProductA_1");
    }
}
?
// 2类 A产品
public class ProductA_2 extends ProductA {
    @Override
    public void doSomething() {
        System.out.println("ProductA_2");
    }
}
// B产品抽象类类
public abstract class ProductB implements Product {
    public abstract void doSomething();
}
?
// 1类 B产品
public class ProductB_1 extends ProductB {
    @Override
    public void doSomething() {
        System.out.println("ProductB_1");
    }
}
?
// 2类 B产品
public class ProductB_2 extends ProductB {
    @Override
    public void doSomething() {
        System.out.println("ProductB_2");
    }
}

 

以上是关于抽象工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式学习——简单工厂模式工厂模式抽象工厂模式

设计模式 创建者模式 工厂设计模式 -- 抽象工厂设计模式介绍和实现

设计模式:抽象工厂模式

设计模式11:抽象工厂模式

C++工厂模式(简单工厂工厂方法抽象工厂)

C++工厂模式(简单工厂工厂方法抽象工厂)