抽象工厂模式

抽象工厂模式

定义个抽象父类,抽象父类中定义一个抽象的创建对象的方法,然后由子类来创建一系列相关的产品或者依赖簇,不同于工厂方法适用于单个产品。

案例

抽象工厂模式.drawio

代码

定义多个产品以及多个实现类

/**
 * 抽象产品:ProductA
 * 
 */
public interface ProductA {

    void use();
}



/**
 * 具体产品 ProductA1
 *
 * @author: Hui
 **/
public class ProductA1 implements ProductA{
    @Override
    public void use() {
        System.out.println("ProductA1 use ~~~ ");
    }
}


/**
 * 具体产品 ProductA2
 *
 * @author: Hui
 **/
public class ProductA2 implements ProductA{
    @Override
    public void use() {
        System.out.println("ProductA2 use ~~ ");
    }
}

/**
 * 抽象产品:ProductB
 * 
 */
public interface ProductB {

    void use();
}


/**
 * 具体产品 ProductB1
 *
 * @author: Hui
 **/
public class ProductB1 implements ProductB{
    @Override
    public void use() {
        System.out.println("ProductB1 use ~~~ ");
    }
}

/**
 * 具体产品 ProductB2
 *
 * @author: Hui
 **/
public class ProductB2 implements ProductB{
    @Override
    public void use() {
        System.out.println("ProductB2 use ~~~ ");
    }
}

定义抽象工厂以及多个的子类工厂

/**
 *  抽象工厂
 *
 * @author: Hui
 **/
public abstract class AbsFactory {

    public abstract ProductA createProductA();
    public abstract ProductB createProductB();

}

/**
 * 具体工厂 1
 *
 * @author: Hui
 **/
public class ConcreteFactory1 extends AbsFactory{
    @Override
    public ProductA createProductA() {
        return new ProductA1();
    }

    @Override
    public ProductB createProductB() {
        return new ProductB1();
    }
}


/**
 * 具体工厂 2
 *
 * @author: Hui
 **/
public class ConcreteFactory2 extends AbsFactory{
    @Override
    public ProductA createProductA() {
        return new ProductA2();
    }

    @Override
    public ProductB createProductB() {
        return new ProductB2();
    }
}

客户端使用

/**
 * 客户端
 *
 * @author: Hui
 **/
public class Client {

    public static void main(String[] args) {
        AbsFactory factory = new ConcreteFactory1();
        System.out.println("产品1 ~~~ ");
        factory.createProductA().use();
        factory.createProductB().use();

        factory = new ConcreteFactory2();
        System.out.println("产品2 ~~~ ");
        factory.createProductA().use();
        factory.createProductB().use();


    }
}

输出结果

image-20240702103530466

相关推荐

  1. [go] 抽象工厂模式

    2024-07-11 11:20:03       44 阅读
  2. 设计模式 抽象工厂

    2024-07-11 11:20:03       48 阅读
  3. 抽象工厂模式

    2024-07-11 11:20:03       43 阅读
  4. 设计模式抽象工厂

    2024-07-11 11:20:03       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 11:20:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 11:20:03       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 11:20:03       58 阅读
  4. Python语言-面向对象

    2024-07-11 11:20:03       69 阅读

热门阅读

  1. 华为机试HJ84统计大写字母个数

    2024-07-11 11:20:03       20 阅读
  2. MySQL中in和exists的区别

    2024-07-11 11:20:03       20 阅读
  3. Spring Boot 常用 Starter

    2024-07-11 11:20:03       22 阅读
  4. dify/api/models/tool.py文件中的数据表

    2024-07-11 11:20:03       22 阅读
  5. 【SQL】InnoDB的意向锁

    2024-07-11 11:20:03       24 阅读
  6. SpringSecurity中文文档(Servlet OAuth 2.0 Client)

    2024-07-11 11:20:03       19 阅读
  7. Linux串口设备的使用<ubuntu>

    2024-07-11 11:20:03       21 阅读
  8. 计算机如何学习

    2024-07-11 11:20:03       19 阅读
  9. 【通信原理】matlab中pskmod的介绍

    2024-07-11 11:20:03       18 阅读
  10. Perl词法分析:构建编程语言解析器的指南

    2024-07-11 11:20:03       24 阅读