参考文档:
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); } }