抽象工厂模式

文章目录

抽象工厂模式

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

案例

代码

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

java 复制代码
/**
 * 抽象产品: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 ~~~ ");
    }
}

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

java 复制代码
/**
 *  抽象工厂
 *
 * @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();
    }
}

客户端使用

java 复制代码
/**
 * 客户端
 *
 * @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();


    }
}

输出结果

相关推荐
IT猿手2 分钟前
最新高性能多目标优化算法:多目标麋鹿优化算法(MOEHO)求解TP1-TP10及工程应用---盘式制动器设计,提供完整MATLAB代码
开发语言·深度学习·算法·机器学习·matlab·多目标算法
单片机学习之路6 分钟前
【C语言】结构
c语言·开发语言·stm32·单片机·51单片机
蜗牛hb16 分钟前
VMware Workstation虚拟机网络模式
开发语言·学习·php
汤姆和杰瑞在瑞士吃糯米粑粑31 分钟前
【C++学习篇】AVL树
开发语言·c++·学习
J不A秃V头A36 分钟前
IntelliJ IDEA中设置激活的profile
java·intellij-idea
Biomamba生信基地38 分钟前
R语言基础| 功效分析
开发语言·python·r语言·医药
DARLING Zero two♡39 分钟前
【优选算法】Pointer-Slice:双指针的算法切片(下)
java·数据结构·c++·算法·leetcode
手可摘星河40 分钟前
php中 cli和cgi的区别
开发语言·php
小池先生1 小时前
springboot启动不了 因一个spring-boot-starter-web底下的tomcat-embed-core依赖丢失
java·spring boot·后端
CodeClimb1 小时前
【华为OD-E卷-木板 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od