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

xiaoxiao2021-02-28  83

参考文档:

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

转载请注明原文地址: https://www.6miu.com/read-77386.html

最新回复(0)