抽象工厂实践

抽象工厂模式详解

背景介绍

前面我们介绍了简单工厂,知道了可以通过简单工厂来获得想要的单个产品。那如果我们想要获的是一系列或者相互依赖对象的对象呢?这个时候就需要一个功能更加强大的工厂——抽象工厂。

示例

还是通过例子来做说明,这个例子是一个客户请求工程师帮忙组装电脑。同时为了突出学习重点,这个电脑只有cpu 和 主板。主要是用来学习设计模式嘛!这个工程师有两套装机方案供客户选择。
由于代码全部贴出来,可能较长。为了行文紧凑,便只将与本文学习相关的代码贴出来,详细代码见 设计模式代码请戳这里
   1. 定义接口

public interface AbstractFactory
{
    public CPUApi createCpu();
    public MainBoardApi createMainBoard(); 
}
public interface CPUApi
{    
    public void showID();    
    public void calculate();
}
public interface MainBoardApi
{
    public  void showID();    
    public void installCpu();
}

   2. 根据接口分别实现两种型号的CPU和主板,以及供客户选择的两套方案

public class AMDCpu implements CPUApi
{
    @Override
    public void showID() {
        System.out.println("this is AMD cpu"+this.getClass().getName());
    }
    @Override
    public void calculate() {
        System.out.println("AMD calculates good!");
    }
}
public class IntelCpu implements CPUApi
{
    @Override
    public void showID() {
        System.out.println("this is intel cpu");
    }
    @Override
    public void calculate() {
        System.out.println("intel calculates good!");
    }
}
public class GAMainBoard implements MainBoardApi
{
    @Override
    public void showID() {
        System.out.println("this is GA" + this.getClass().getName());
    }
    @Override
    public void installCpu() {
        System.out.println("cpu is installed");
    }
}
public class MSIMainBoard implements MainBoardApi
{
    @Override
    public void showID() {
        System.out.println("this id msi" + this.getClass().getName());
    }
    @Override
    public void installCpu() {
        System.out.println("cpu is installed");
    }
}
public class Schema1 implements AbstractFactory
{
    @Override
    public CPUApi createCpu() {
        return new IntelCpu();
    }
    @Override
    public MainBoardApi createMainBoard() {
        return new GAMainBoard();
    }
}
public class Schema2 implements AbstractFactory
{
    @Override
    public CPUApi createCpu() {
        return new AMDCpu();
    }
    @Override
    public MainBoardApi createMainBoard() {
        return new MSIMainBoard();
    }
}

   3. 实现装机工程师

public class ComputerEngineer
{   
    public void makeComputer(){       
        Schema1 schema1 = new Schema1();
        prepareHardwares(schema1);
    }    
    public void prepareHardwares(AbstractFactory schema){        
        CPUApi cup = schema.createCpu();
        MainBoardApi mainBoard =  schema.createMainBoard();        
        System.out.println("方案一:");
        cup.showID();
        mainBoard.showID();;
    }
}

   3. 客户端调用

public class Client
{
    public static void main(String[] args) {
        ComputerEngineer engineer = new ComputerEngineer();
        engineer.makeComputer();
    }
}

抽象工厂总结

简单工厂生产单个组件,而抽象工厂生成一系列组件,通常组件具有一定的联系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值