抽象工厂模式

文章目录

抽象工厂模式

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

案例

代码

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

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();


    }
}

输出结果

相关推荐
froginwe112 分钟前
PHP 表单 - 必需字段
开发语言
周杰伦_Jay2 分钟前
【Golang 核心特点与语法】简洁高效+并发原生
开发语言·后端·golang
小坏讲微服务3 分钟前
Spring Boot 4.0 + MyBatis-Plus 实战响应式编程的能力实战
java·spring boot·后端·mybatis
by__csdn4 分钟前
javascript 性能优化实战:垃圾回收优化
java·开发语言·javascript·jvm·vue.js·性能优化·typescript
by__csdn6 分钟前
JavaScript性能优化:减少重绘和回流(Reflow和Repaint)
开发语言·前端·javascript·vue.js·性能优化·typescript·vue
BAStriver6 分钟前
关于Flowable的使用小结
java·spring boot·spring·flowable
扶苏-su7 分钟前
Java---泛型
java·开发语言·泛型
Dolphin_Home8 分钟前
Java Stream 实战:订单商品ID过滤技巧(由浅入深)
java·开发语言·spring boot
weixin_3077791311 分钟前
Jenkins SSH Build Agents 插件详解:远程构建的利器
运维·开发语言·架构·ssh·jenkins
毕设源码-钟学长12 分钟前
【开题答辩全过程】以 高校健康申报系统为例,包含答辩的问题和答案
java·tomcat·echarts