抽象工厂模式Abstract Factory(创建型)

参考文档:

1.设计模式书籍

2.http://blog.csdn.net/eson_15/article/details/51253161(【java设计模式】之 抽象工厂(Abstract Factory)模式)

3.http://blog.csdn.net/hguisu/article/details/7505909(设计模式(一)工厂模式Factory(创建型))

4.http://blog.csdn.net/zhshulin/article/details/38349211(设计模式——抽象工厂模式(Abstract Factory))


理论方面的知识,可以查看上面的参考文档中的内容。

在这里实现一个案例,为参考文档4中的案例,组装电脑。

可以看一下抽象工厂模式实现的结构图:



代码实现:

Client.java:
package com.rick.designpattern.abstract_factory;

/**
 * Created by MyPC on 2017/6/8.
 */
public class Client {

    public static void main(String[] args) {
        ComputerEngineer computerEngineer = new ComputerEngineer();
        AbstractFactory intelFactory = new IntelFactory();  //客户选定某类具体工厂,工厂负责成产匹配的组件
        computerEngineer.makeComputer(intelFactory);        //工程师开始组装
    }
}
ComputerEngineer.java:
package com.rick.designpattern.abstract_factory;

/**
 * Created by MyPC on 2017/6/8.
 */
public class ComputerEngineer {

    private CPU cpu;
    private MainBoard mainBoard;

    public void makeComputer(AbstractFactory abstractFactory) {
        //1.准备装机的硬件
        this.prepareHardWares(abstractFactory);
        //2.组装机器
        //3.测试机器
        //4.交付客户  
    }

    private void prepareHardWares(AbstractFactory abstractFactory) {
        this.cpu = abstractFactory.createCpu();              //准备CPU,但是不关心是什么CPU
        this.mainBoard = abstractFactory.creatMainBoard();   //准备主板,也不关心是什么主板


        //查看槽孔是否和脚针数目匹配
        this.cpu.calculate();
        this.mainBoard.installCpu();
    }

}
AbstractFactory.java:
package com.rick.designpattern.abstract_factory;

/**
 * Created by MyPC on 2017/6/8.
 */
public interface AbstractFactory {

    /**
     * 创建Cpu对象
     *
     * @return Cpu对象
     */
    public CPU createCpu();

    /**
     * 创建MainBoard对象
     *
     * @return MainBoard对象
     */
    public MainBoard creatMainBoard();
}
IntelFactory.java:
package com.rick.designpattern.abstract_factory;

/**
 * 用来创建与Intel相关的所有产品
 * <p>
 * Created by MyPC on 2017/6/8.
 */
public class IntelFactory implements AbstractFactory {
    @Override
    public CPU createCpu() {
        return new IntelCPU(24);
    }

    @Override
    public MainBoard creatMainBoard() {
        return new IntelMainBoard(24);
    }
}
AmdFactory.java:
package com.rick.designpattern.abstract_factory;

/**
 * 用来创建AMD下系列产品
 * <p>
 * Created by MyPC on 2017/6/8.
 */
public class AmdFactory implements AbstractFactory {
    @Override
    public CPU createCpu() {
        return new AmdCPU(30);
    }

    @Override
    public MainBoard creatMainBoard() {
        return new AmdMainBoard(30);
    }
}
CPU.java:
package com.rick.designpattern.abstract_factory;

/**
 * Created by MyPC on 2017/6/8.
 */
public interface CPU {

    public void calculate();
}
IntelCPU.java:
package com.rick.designpattern.abstract_factory;

/**
 * Created by MyPC on 2017/6/8.
 */
public class IntelCPU implements CPU {
    private int pins;   //表示CPU的脚针数

    public IntelCPU(int pins) {
        this.pins = pins;
    }

    @Override
    public void calculate() {
        System.out.println("Intel CPU的脚针数目:"+pins);
    }
}
AmdCPU.java:
package com.rick.designpattern.abstract_factory;

/**
 * Created by MyPC on 2017/6/8.
 */
public class AmdCPU implements CPU {
    private int pins;

    public AmdCPU(int pins) {
        this.pins = pins;
    }

    @Override
    public void calculate() {
        System.out.println("CMD CPU的脚针数目:" + pins);
    }
}
MainBoard.java:
package com.rick.designpattern.abstract_factory;

/**
 * Created by MyPC on 2017/6/8.
 */
public interface MainBoard {
    public void installCpu();
}
IntelMainBoard.java:
package com.rick.designpattern.abstract_factory;

/**
 * Created by MyPC on 2017/6/8.
 */
public class IntelMainBoard implements MainBoard {
    private int cpuHoles;   //表示主板上的CPU插槽孔数,对应脚针数

    public IntelMainBoard(int cpuHoles) {
        this.cpuHoles = cpuHoles;
    }

    @Override
    public void installCpu() {
        System.out.println("Intel主板上的CPU插槽孔数:" + cpuHoles);
    }

}
AmdMainBoard.java:
package com.rick.designpattern.abstract_factory;

/**
 * Created by MyPC on 2017/6/8.
 */
public class AmdMainBoard implements MainBoard {
    private int cpuHoles;

    public AmdMainBoard(int cpuHoles) {
        this.cpuHoles = cpuHoles;
    }

    @Override
    public void installCpu() {
        System.out.println("AMD主板上的CPU插槽孔数:" + cpuHoles);
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值