Java设计模式之抽象工厂模式

设计模式之抽象工厂模式

上次对工厂模式进行了学习,了解到了类型接口,uml图,包括示例代码等相关部分,刚好趁热打铁,对抽象工厂模式进行了学习

一 : 含义 什么是抽象工厂模式 ?

    抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

二 : 解决的问题

         每个工厂只能创建一类产品(工厂模式的缺点)

三: 模式原理

3.1模式的结构

在这里插入图片描述

3.3 优缺点

优点:

  1. 更符合开-闭原则
  2. 符合单一职责原则。
  3. 降低耦合
  4. 不使用静态工厂方法,可以形成基于继承的等级结构。

缺点:

增加新的等级结构麻烦, 需要对原有系统进行较大的修改, 甚至需要修改抽象层代码,这显然会带来较大的不便, 违背了“开闭原则”。
扩展 : 对于新的产品族符合开-闭原则;对于新的产品种类不符合开-闭原则,这一特性称为开-闭原则的倾斜性。

四 实现代码

步骤一 : 创建顶级抽象产品

 * @Description 抽象产品 : 玩具
 * @createTime 2021年05月17日 14:51:00
 */
public interface ToyProduct {
    /**
     * 抽象方法 : 商品生产方法
     */
    void createProduct();
}

步骤二 : 创建抽象工厂

 * @Description 抽象工厂 : 包含具体工厂生产方法
 * @createTime 2021年05月17日 14:47:00
 */
public interface InterfaceFactory {
    /**
     *  获取纪念产品
     * @return 纪念产品
     */
    ToyProduct getCommemorateProduct();

    /**
     *  获取普通产品
     * @return 普通产品
     */
    ToyProduct getGeneralProduct();
}

步骤三 : 创建抽象产品

 * @Description 具体产品方法 :
 * @createTime 2021年05月17日 14:55:00
 */
public class AnimalProduct implements ToyProduct {
    @Override
    public void createProduct() {
        System.out.println("动物玩偶开始生产 : ");
    }
}

 * @Description 抽象产品 : 人物玩偶
 * @createTime 2021年05月17日 14:57:00
 */
public class FiguresProduct implements ToyProduct {
    @Override
    public void createProduct() {
        System.out.println("人物玩偶开始生产 : ");
    }
}

步骤四 : 创建具体产品

public class CatProduct extends AnimalProduct {
    @Override
    public void createProduct() {
        System.out.println("生产了普通款大橘猫玩偶");
    }
}

public class DogProduct extends AnimalProduct {
    @Override
    public void createProduct() {
        System.out.println("生产了一直纪念款柴犬玩偶");
    }
}

public class IronManProduct extends FiguresProduct {
    @Override
    public void createProduct() {
        System.out.println("生产了纪念款钢铁侠");
    }
}

public class WukongProduct extends FiguresProduct {
    @Override
    public void createProduct() {
        System.out.println("生产了普通款玩偶悟空大师");
    }
}

步骤五 : 创建具体工厂

 * @Description 国内玩偶工厂
 * @createTime 2021年05月17日 14:48:00
 */
public class AnimalFactory implements InterfaceFactory {

    @Override
    public ToyProduct getCommemorateProduct() {
        return new DogProduct();
    }

    @Override
    public ToyProduct getGeneralProduct() {
        return new CatProduct();
    }
}


 * @Description 具体工厂 : 国外玩偶工厂
 * @createTime 2021年05月17日 14:49:00
 */
public class FiguresFactory implements InterfaceFactory {

    @Override
    public ToyProduct getCommemorateProduct() {
        return new IronManProduct();
    }

    @Override
    public ToyProduct getGeneralProduct() {
        return new WukongProduct();
    }
}

步骤五 测试

public static void main(String[] args) {
        AnimalFactory animalFactory = new AnimalFactory();
        animalFactory.getCommemorateProduct().createProduct();
        animalFactory.getGeneralProduct().createProduct();

        FiguresFactory figuresFactory = new FiguresFactory();
        figuresFactory.getCommemorateProduct().createProduct();
        figuresFactory.getGeneralProduct().createProduct();
    }

在这里插入图片描述

五 总结 :

应用场景 :

  1. 一个系统不应当依赖于具体类实例如何被创建、 组合和表达的细节, 这对于所有类型的工厂模式都是很重要的, 用户无须关心对象的创建过程, 将对象的创建和使用解耦。

  2. 这个系统有多个系列产品,而系统中只消费其中某一系列产品。 可以通过配置文件等方式来使得用户可以动态改变族, 也可以很方便地增加新的族。

  3. 系统要求提供一个产品类的库,所有产品以同样的接口出现,客户端不需要依赖具体实现

        对抽象工厂模式的学习就记录这么多,如果对大家有帮助的话,可以点一个赞哈,你的鼓励也是创作的动力.共同在计算机的世界加油吧 !

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值