您的位置: 首页 > 生活常识 >

抽象工厂模式是什么模式(图文详解)

100次浏览     发布时间:2024-10-27 08:03:18    
抽象工厂模式的定义

抽象工厂(AbstractFactory)模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。

抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品

抽象工厂模式的结构

抽象工厂模式包含如下角色:

1.AbstractFactory:抽象工厂

提供了创建产品的接口,它包含多个创建产品的方法 newProduct(),可以创建多个不同等级的产品。

2.ConcreteFactory:具体工厂

主要是实现抽象工厂中的多个抽象方法,完成具体产品的创建。

3.AbstractProduct:抽象产品

定义了产品的规范,描述了产品的主要特性和功能,抽象工厂模式有多个抽象产品。

4.Product:具体产品

实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间是多对一的关系。

抽象工厂模式的实现

抽象工厂模式的实现步骤,一般分为如下的5步:

1.创建抽象工厂类

创建抽象工厂类的主要作用:定义具体工厂的公共接口。

源码示例如下:

package com.mikechen.java.design.factory.abstracts.model;

/**
 * 抽象工厂
 *
 * @author mikechen
 */
public abstract class AbstractFactory {

    //创建A产品家族
    public abstract AbstractProductA createProductA();

    //创建B产品家族
    public abstract AbstractProductB createProductB();

}

2.创建目标工厂

源码示例如下:

1)抽象工厂1

package com.mikechen.java.design.factory.abstracts.model;

/**
 * 目标工厂1
 *
 * @author mikechen
 */
public class ConcreteFactory1 extends AbstractFactory{

    @Override
    public AbstractProductA createProductA() {
        return new ConcreteProductA1();
    }

    @Override
    public AbstractProductB createProductB() {
        return new ConcreteProductB1();
    }
}

2)抽象工厂1

package com.mikechen.java.design.factory.abstracts.model;

/**
 * 目标工厂2
 *
 * @author mikechen
 */
public class ConcreteFactory2 extends AbstractFactory{

    @Override
    public AbstractProductA createProductA() {
        return new ConcreteProductA2();
    }

    @Override
    public AbstractProductB createProductB() {
        return  new ConcreteProductB2();
    }
}

3.创建抽象产品族类

创建抽象产品族类的,定义抽象产品的公共接口。

1)抽象产品A

源码示例如下:

package com.mikechen.java.design.factory.abstracts.model;

/**
 * 抽象产品A
 *
 * @author mikechen
 */
public abstract class AbstractProductA {

    //每个产品相同方法,不同实现
    public abstract void make();

}

2)抽象产品B

package com.mikechen.java.design.factory.abstracts.model;

/**
 * 抽象产品B
 *
 * @author mikechen
 */
public abstract class AbstractProductB {

    //每个产品相同方法,不同实现
    public abstract void make();

}

4.创建具体产品类

创建具体产品类的主要作用:继承抽象产品类, 定义生产的具体产品。

源码示例如下:

1)目标产品A2

package com.mikechen.java.design.factory.abstracts.model;

/**
 * 目标产品A1
 *
 * @author mikechen
 */
public class ConcreteProductA1 extends AbstractProductA {

    @Override
    public void make() {
        System.out.println("产品A1出炉");
    }
}

2)目标产品A2

package com.mikechen.java.design.factory.abstracts.model;

/**
 * 目标产品A2
 *
 * @author mikechen
 */
public class ConcreteProductA2 extends AbstractProductA {

    @Override
    public void make() {
        System.out.println("产品A2出炉");
    }
}

3)目标产品B1

package com.mikechen.java.design.factory.abstracts.model;

/**
 * 目标产品B1
 *
 * @author mikechen
 */
public class ConcreteProductB1 extends AbstractProductB {

    @Override
    public void make() {
        System.out.println("产品B1出炉");
    }
}

4)目标产品B2

package com.mikechen.java.design.factory.abstracts.model;

/**
 * 目标产品B2
 *
 * @author mikechen
 */
public class ConcreteProductB2 extends AbstractProductB {

    @Override
    public void make() {
        System.out.println("产品B2出炉");
    }
}

5.创建具体工厂类

创建具体工厂类的主要作用:继承抽象工厂类,定义创建对应具体产品实例的方法。

源码示例如下:

1)目标工厂1

package com.mikechen.java.design.factory.abstracts.model;

/**
 * 目标工厂1
 *
 * @author mikechen
 */
public class ConcreteFactory1 extends AbstractFactory{

    @Override
    public AbstractProductA createProductA() {
        return new ConcreteProductA1();
    }

    @Override
    public AbstractProductB createProductB() {
        return new ConcreteProductB1();
    }
}

2)目标工厂2

package com.mikechen.java.design.factory.abstracts.model;

/**
 * 目标工厂2
 *
 * @author mikechen
 */
public class ConcreteFactory2 extends AbstractFactory{

    @Override
    public AbstractProductA createProductA() {
        return new ConcreteProductA2();
    }

    @Override
    public AbstractProductB createProductB() {
        return  new ConcreteProductB2();
    }
}

抽象工厂模式的优缺点

1.优点

  • 抽象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束。
  • 增加新的产品族很方便,无需修改已有系统,符合开闭原则。
  • 所谓的产品族,一般或多或少的都存在一定的关联,抽象工厂模式就可以在类内部对产品族的关联关系进行定义和描述,而不必专门引入一个新的类来进行管理。

2.缺点

  • 增加新的产品等级结构很麻烦,增加新的产品等级结构很麻烦,增加新的产品等级结构很麻烦。
  • 这是因为抽象工厂几乎确定了可以被创建的产品集合,支持新种类的产品就需要扩展该工厂接口,这将涉及抽象工厂类及其所有子类的改变。

抽象工厂模式的应用场景

使用抽象工厂模式一般要满足以下条件:

  • 系统中有多个产品族,每个具体工厂创建同一族但属于不同等级结构的产品。
  • 系统一次只可能消费其中某一族产品,即同族的产品一起使用。

相关文章
  • 激光美白嫩肤效果怎么样?明显吗   2023-10-18 18:09:09

      护肤已经成为和吃饭喝茶一样必做的事情,尤其是对于女性。很多人皮肤天生比较暗黑,也因年龄因素导致肌肤暗黄粗糙,要想保持年轻容颜选择激光美白。那么,激光美白嫩肤的效果怎么样?  激

  • 电脑系统坏了怎么修复?4招解决   2023-10-18 18:03:36

    电脑系统使用的时间久后容易出现各种故障问题,比如说常见的电脑蓝屏,黑屏,电脑无法开机等情况。当遇到这些情况的时候,很多人都不知道该怎么解决。那么电脑系统坏了怎么修复呢?下面就给大家

  • 前脚掌疼是怎么回事(为什么会脚底板痛?或与这7因素有关,八个方法可有效缓解)   2023-10-18 18:02:53

    脚板底痛是生活中十分常见的一种症状,虽然不是什么严重的疾病,但是会让人十分的不舒服。所以下面就让我们看一下脚底板痛的原因,以及缓解脚底板痛的一些方法吧!  脚底板疼痛的原因:1、如

  • 油性皮肤如何美白最快?很多人都没搞懂,难怪用大牌也是浪费   2023-10-18 17:58:54

    美白护肤方法多、产品丰富,但是为什么有人用了就是白不了呢?因为大家在尝试各种美白方法时,忘了非常重要的一步:分清肤质做美白。不同肤质的人变黑的原因各不相同,也不单单是用美白精华就能

  • 如何自制美白面膜介绍7款美白面膜的自制做法   2023-10-18 17:57:27

    所谓一白遮百丑,夏天是最容易晒黑的一个季节。皮肤稍不留意就会被晒黑,如何快速美白呢?今天给大家带来的就是自制美白面膜让你快速美白。蕃茄加蜂蜜将蕃茄搅拌成蕃茄汁后,加入适量蜂蜜调匀成

  • 电脑选购——电脑哪种品牌比较好   2023-10-18 17:56:52

    手提电脑哪个牌好?这个没有一个绝对的答案,与其说哪个电脑牌子最好,还不如说哪个牌子的哪款电脑更适合自己。下面来看看世界笔记本电脑排名,或许你就知道手提电脑哪个牌好了。1.联想Thi