设计模式---抽象工厂模式

本文深入解析抽象工厂模式,一种用于创建一系列相关或依赖对象而无需指定它们具体的类的设计模式。通过实例展示了如何定义抽象工厂、产品基类及具体实现,阐述了其在组件组合和系统扩展中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

抽象工厂模式

定义:用于创建具有相同规律或产品层次的族的产品(类)的模式,定义创建这些类的抽象工厂,具体实现交由子类实现
简单说就是抽象工厂模式是用于定于产品族的创建的模式

看完感觉不错,麻烦点个赞,让我开心下

/**
 * @ClassName ComputerFactory
 * @Author 莫邪
 * @Description TODO 抽象工厂接口:定义用于创建电脑系列的产品族(可以分为不同品牌下的电脑工厂)
 * @Date Created in 23:52 2019/4/24
 * @Version 1.0
 */
public interface ComputerFactory {
    AbstractCpu createCpu();
    AbstractMainBoard createMainBoard();
}
/**
 * @ClassName AbstractCpu
 * @Author 莫邪
 * @Description TODO 某中类型产品的抽象,具有多种实现
 * @Date Created in 23:58 2019/4/24
 * @Version 1.0
 */
public abstract class AbstractCpu {
    private int num ;
    public AbstractCpu(int num){
        this.num=num;
    }

    public int getNum() {
        return num;
    }
}

/**
 * @ClassName AbstractBoss
 * @Author 莫邪
 * @Description TODO 抽象主板
 * @Date Created in 23:59 2019/4/24
 * @Version 1.0
 */
public abstract class AbstractMainBoard {

    private int num;//主板的阵脚数
    public AbstractMainBoard(int num){
        this.num=num;
    }

    public int getNum() {
        return num;
    }
}

/**
 * @ClassName Computer
 * @Author 莫邪
 * @Description TODO 电脑组合类用于提供服务,一般这些产品族会有一些共同的功能,可以封装一下
 * @Date Created in 0:25 2019/4/25
 * @Version 1.0
 */
public class Computer {

    private AbstractMainBoard mainBoard;
    private AbstractCpu cpu;

    public Computer(AbstractMainBoard mainBoard, AbstractCpu cpu) {
        this.mainBoard = mainBoard;
        this.cpu = cpu;
    }

    private boolean load(){
        //加载判断
        if(cpu.getNum()==mainBoard.getNum()){
            return true;
        }
        return false;
    }


    public void server(){
        if(load()){
            System.out.println("ok run");
        }else{
            System.out.println("mainboard is not adapter cpu");
        }

    }
}

重点来了—工厂的实现,这里只写了一个,可以有多种实现

/**
 * @ClassName AbstractComputer
 * @Author 莫邪
 * @Description TODO 定义一个创建电脑配件的工厂。
 * @Date Created in 23:56 2019/4/24
 * @Version 1.0
 */
//每一个不同的ComputerFactory的实现就是一套方案,创建的CPU和MainBoard相互之间有关联关系,
// 他们之间得满足一定条件才能使用,抽象工厂模式就是提供这种产品(组件)的组合的一种方案。
public  class DefaultComputerFactory implements ComputerFactory{

    @Override
    public AbstractCpu createCpu() {
        return new AbstractCpu(100) {};//费事写实现类,用匿名类
    }
    @Override
    public AbstractMainBoard createMainBoard() {
        return new AbstractMainBoard(100) {};
    }

}
/**
 * @ClassName AbstractFactoryClient
 * @Author 莫邪
 * @Description TODO 抽象工厂的使用
 * @Date Created in 0:31 2019/4/25
 * @Version 1.0
 */
public class AbstractFactoryClient {
    public static void main(String[] args) {
        ComputerFactory factory = new DefaultComputerFactory();//这里可以使用简单工厂,通过配置决定,		 
       										 //这里介绍抽象工厂就不混在一起了,简单工厂在这个专栏里有
        Computer computer = new Computer(factory.createMainBoard(),factory.createCpu());
        computer.server();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值