美文网首页
抽象工厂

抽象工厂

作者: 熊猫派 | 来源:发表于2019-01-25 14:54 被阅读0次

提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。

模式结构

1.AbstractFactory:抽象工厂(声明了一组用于创建对象的方法, 注意是 一组。)
2.ConcreteFactory:具体工厂(它实现了在抽象工厂中声明的创建对象的方法,生成一组具体对象。)
3.AbstractProduct:抽象产品
4.Product:具体产品
UML:

AbatractFactory.jpg

与工厂方法最大的不同点

抽象工厂中每个工厂可以创建多种类的产品;而工厂方法每个工厂只能创建一类。

使用步骤

1.创建抽象工厂类

//抽象工厂接口
public abstract class AbstractCreator  {
    public abstract AbstractProduct ManufactureContainer();
    public abstract AbstractProduct ManufactureMould();
}

2.创建抽象产品族类

//抽象产品族类
public abstract class AbstractProduct {
    //所有产品类的公共业务方法
    public void methodSame() {
        //公共方法的实现
    }
    //声明抽象业务方法
    public  abstract void methodDiff();
}

3.创建抽象产品类

//模块产品抽象类
public abstract class MouldProduct extends AbstractProduct{
    @Override
    public abstract void methodDiff();
}
//容器产品抽象类
public abstract class ContainerProduct extends AbstractProduct {
    @Override
    public abstract void methodDiff();
}
  1. 创建具体产品类(继承抽象产品类)
//模块产品A
public class MouldProductA extends MouldProduct {
    @Override
    public void methodDiff() {
        System.out.println("生产出了模块产品A");
    }
}
//模块产品B
public class MouldProductB extends MouldProduct {
    @Override
    public void methodDiff() {
        System.out.println("生产出了模块产品B");
    }
}
//容器产品A
public class ContainerProductA extends ContainerProduct {
    @Override
    public void methodDiff() {
        System.out.println("生产出了容器产品A");
    }
}
//容器产品B
public class ContainerProductB extends ContainerProduct {
    @Override
    public void methodDiff() {
        System.out.println("生产出了容器产品B");
    }
}

5.创建具体工厂类(继承抽象工厂类)

//具体工厂A
public class FactoryA extends AbstractCreator{

    @Override
    public AbstractProduct ManufactureContainer() {
        return new ContainerProductA();
    }

    @Override
    public AbstractProduct ManufactureMould() {
        return new MouldProductA();
    }
}
//具体工厂B
public class FactoryB extends AbstractCreator {
    @Override
    public AbstractProduct ManufactureContainer() {
        return new ContainerProductB();
    }

    @Override
    public AbstractProduct ManufactureMould() {
        return new MouldProductB();
    }
}

6.客户端通过实例化具体的工厂类

//生产工作流程
public class AbstractFactoryPattern {
    public static void main(String[] args){
        FactoryA mFactoryA = new FactoryA();
        FactoryB mFactoryB = new FactoryB();
        //A厂当地客户需要容器产品A
        mFactoryA.ManufactureContainer().methodDiff();
        //A厂当地客户需要模具产品A
        mFactoryA.ManufactureMould().methodDiff();

        //B厂当地客户需要容器产品B
        mFactoryB.ManufactureContainer().methodDiff();
        //B厂当地客户需要模具产品B
        mFactoryB.ManufactureMould().methodDiff();

    }
}

优点

-降低耦合
可以减少客户端与具体产品类之间的依赖,从而使系统耦合度低,这样更有利于后期的维护和扩展;
-更符合开-闭原则
新增一种产品类时,只需要增加相应的具体产品类和相应的工厂子类即可
-符合单一职责原则
每个具体工厂类只负责创建对应的产品
-不使用静态工厂方法,可以形成基于继承的等级结构。

缺点

-抽象工厂模式很难支持新种类产品的变化
这是因为抽象工厂接口中已经确定了可以被创建的产品集合,如果需要添加新产品,此时就必须去修改抽象工厂的接口,这样就涉及到抽象工厂类的以及所有子类的改变,这样也就违背了“开发——封闭”原则。

应用场景

1.一个系统不要求依赖产品类实例如何被创建、组合和表达的表达,这点也是所有工厂模式应用的前提。
2.这个系统有多个系列产品,而系统中只消费其中某一系列产品
3.系统要求提供一个产品类的库,所有产品以同样的接口出现,客户端不需要依赖具体实现。

相关文章

  • 第3章 创建型模式-抽象工厂模式

    ■ 抽象工厂模式的优点 ■ 抽象工厂模式的缺点 ■ 抽象工厂模式的使用场景 ■ 抽象工厂 AbstractFact...

  • 抽象工厂模式(选择产品簇)

    目录 回顾众多工厂模式 抽象工厂模式的理念 抽象工厂模式与工厂方法模式的差异 怎么来实现抽象工厂模式 抽象工厂模式...

  • 【抽象工厂模式】Abstract Factory Design

    抽象工厂模式 抽象工厂模式是**Creational **模式之一 抽象工厂模式和工厂模式很相似,甚至可以说抽象工...

  • 工厂模式

    工厂模式细分三种:简单工厂模式、工厂模式、抽象工厂模式。 工厂模式相当于抽象了简单工厂模式的工厂类,而抽象工厂模式...

  • 设计模式(三)——抽象工厂模式

    抽象工厂模式 抽象工厂模式是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。在抽象工厂中,接口是负责...

  • 工厂模式

    抽象工厂模式:抽象工厂,具体工厂,抽象产品,具体产品 形容词用接口,名词用抽象类 工厂方法就是只生成一种产品的抽象...

  • 抽象工厂

    iOS设计模式 - 抽象工厂 原理图 说明 抽象工厂相当于在简单工厂基础上将工厂进行了抽象 抽象工厂提供了创建一系...

  • 设计模式(3) 抽象工厂模式

    抽象工厂模式 优化抽象工厂 异步工厂 在学习抽象工厂模式前,先来回顾一下前面的简单工厂和工厂方法模式。简单工厂的职...

  • Android 源码设计模式解析与实战 读书笔记 6 抽象工厂模

    创建型设计模式 —— 抽象工厂模式 1. 抽象工厂模式介绍 抽象工厂模式(Abstract Factory Pat...

  • 3. 设计模式的代码表示之一

    一、工厂模式(【客户类】→【工厂类/工厂方法】→创建【服务类】) 二、抽象工厂(【客户类】→【抽象工厂类】→【工厂...

网友评论

      本文标题:抽象工厂

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