设计模式|抽象工厂

设计模式|抽象工厂

意图

抽象工厂提供一个接口,用来创建相关的对象家族,而不是和工厂方法一样,创建一个对象。

抽象工厂

抽象工厂模式的各个角色:

  • 抽象工厂角色(Factory),工厂方法模式的核心,是具体工厂角色必须实现的接口或者必须继承父类。在 Java 类中他是抽象类或者接口来实现的。
  • 具体工厂角色(ConcreteFactory),这个是实现抽象工厂接口的具体工厂类。
  • 抽象产品角色(Product):抽象工厂模式所创建对象的基类,也就是产品对象共同父类。
  • 具体产品角色(ConcreteProduct),这个角色实现了抽象产品橘色所定义的接口。

抽象工厂模式创建的是对象家族,也就是很多对象而不是一个对象。抽象工厂模式用了工厂方法模式来创建单一对象。 AbstractFactory 中的 createProductA() 和 createProductB() 都可让子类实现,这两个方法单独来看就是在创建一个对象。

Client 要通过 AbstaractFactoty 同时调用两个方法创建两个对象,这里的两个对象属于同一类。

类图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0gQY5mR6-1605330939691)(https://imgkr2.cn-bj.ufileos.com/6e971463-1286-4c01-b0b3-cac93716f299.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=q331T7PR4y4xInJNDjEWwGrJgLE%253D&Expires=1605411669)]

代码实现

产品抽象类

public class AbstractProductA {
}
public class AbstractProductB {
}

产品聚类

public class ProductA1 extends AbstractProductA {
}

public class ProductA2 extends AbstractProductA {
}
public class ProductB1 extends AbstractProductB {
}
public class ProductB2 extends AbstractProductB {
}

抽象工厂类

public abstract class AbstractFactory {
    abstract AbstractProductA createProductA();
    abstract AbstractProductB createProductB();
}

抽象工厂具体实现

public class ConcreteFactory1 extends AbstractFactory {
    AbstractProductA createProductA() {
        return new ProductA1();
    }

    AbstractProductB createProductB() {
        return new ProductB1();
    }
}

public class ConcreteFactory2 extends AbstractFactory {
    AbstractProductA createProductA() {
        return new ProductA2();
    }

    AbstractProductB createProductB() {
        return new ProductB2();
    }
}

客户端调用

public class Client {
    public static void main(String[] args) {
        AbstractFactory abstractFactory = new ConcreteFactory1();
        AbstractProductA productA = abstractFactory.createProductA();
        AbstractProductB productB = abstractFactory.createProductB();
        // do something with productA and productB
    }
}

参考资料

  • https://blog.csdn.net/chitangchan3789/article/details/101004317

欢迎关注公众号: 程序员开发者社区

在这里插入图片描述

wangxiaoming CSDN认证博客专家 架构 Spring Boot Redis
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付 19.89元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值