Java 设计模式——抽象工厂设计模式(创建型设计模式)

原文地址:https://www.cnblogs.com/peter_zhang/p/AbstractFactory.html
个人觉得理解了工厂模式,抽象工厂就简单了很多很多,建议先看下工厂模式:
https://blog.csdn.net/qq_33333654/category_11536783.html

其他工厂设计模式:
工厂设计模式入门级理解
工厂设计模式进阶(建议详细阅读)
工厂设计模式实战经验分享(基于spring动态加载)

额外了解单例有助于理解
单例设计模式

抽象工厂概述

抽象工厂模式,对方法工厂模式进行抽象。世界各地都有自己的水果园,我们将这些水果园抽象为一个水果园接口,在中国、英国和美国都有水果园,种植不同的水果,比如苹果、香蕉和梨等。这里将苹果进行抽象,所以,苹果又分为中国苹果,英国苹果和美国苹果。中国的水果园中有苹果、香蕉和梨等。抽象工厂中声明生产苹果、香蕉和梨等水果,那么具体的工厂相当于中国、英国和美国的水果园,各个水果园负责生产水果、香蕉和梨等。

相关术语

产品等级结构

产品的继承结构,与类的继承相似。例如苹果是一个抽象的类,那么中国苹果、美国苹果和英国的苹果就是其子类。

产品族

指同一个工厂生产的,位于不同的产品等级结构的一组产品。例如苹果、香蕉和梨都产自中国,水果的等级结构不同,构成一个产品族。

抽象工厂

是一个接口,抽象工厂模式的核心,包含对多个产品等级结构的声明,任何工厂类都必须实现这个接口。

具体工厂

是抽象工厂的实现,负责实例化某个产品族中的产品对象。例如中国工厂生产苹果、香蕉和梨这些产品。

结构示意图

产品族和产品等级结构示意图

在这里插入图片描述

抽象工厂模式示意图

在这里插入图片描述

JAVA代码

创建Fruit接口、Apple抽象类、ChinaApple类等

public interface Fruit {
    public void get();
}
public abstract class Apple implements Fruit{
    public abstract void get();
}
public class ChinaApple extends Apple {

    @Override
    public void get() {
        System.out.println("中国的苹果...");
    }
}

创建抽象工厂、具体工厂

public interface FruitFactory {
    //实例化苹果
    public Fruit getApple();
    //实例化香蕉
    public Fruit getBanana();
}
public class ChinaFactory implements FruitFactory {

    @Override
    public Fruit getApple() {
        return new ChinaApple();
    }
    
    @Override
    public Fruit getBanana() {
        return new ChinaBanana();
    }
}

测试

public class MainClass {

    public static void main(String[] args){
        //创建中国工厂
        FruitFactory chinaFactory = new ChinaFactory();
        //通过中国工厂生产中国苹果实例
        Fruit apple = chinaFactory.getApple();
        apple.get();
        //通过中国工厂生产中国香蕉实例
        Fruit banana = chinaFactory.getBanana();
        banana.get();        
        
        //创建英国工厂
        FruitFactory englandFactory = new EnglandFactory();
        //通过英国工厂生产英国苹果实例
        Fruit apple1 = englandFactory.getApple();
        apple1.get();
        //通过英国工厂生产英国香蕉实例
        Fruit banana2 = englandFactory.getBanana();
        banana2.get();
    }
}

在这里插入图片描述

总结

模式来源于生活。抽象工厂模式,对工厂方法模式进行了升级。对产品进行了进一步的抽象,同时改变了抽象工厂和具体工厂的设计模式。这种模式便于横向的扩展,例如我们想添加一个美国工厂来生产苹果和香蕉,只需要新建美国苹果,美国香蕉和生产这两种水果的具体工厂–美国工厂。缺点就是不利于纵向的扩展,例如我们想在工厂中生产梨,这就需要修改抽象工厂,各个具体工厂也同时需要修改。

其他工厂设计模式:
工厂设计模式入门级理解
工厂设计模式进阶(建议详细阅读)
工厂设计模式实战经验分享(基于spring动态加载)

额外了解单例有助于理解
单例设计模式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不能吃辣的JAVA程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值