应用场景:
1.一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的。
2.这个系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。
3.同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来。(比如:Intel主板必须使用Intel CPU、Intel芯片组)
com.android.abstract_factory.bean包下
/**
* 定义cpu接口
* @author Administrator
*
*/
public interface Cpu {
public void calculate();
}
------------------------------------
/**
* Intel CPU
* @author Administrator
*
*/
public class IntelCpu implements Cpu{
private int pins;
@Override
public void calculate() {
System.out.println("Intel Cpu针脚数:"+pins);
}
public IntelCpu(int pins){
this.pins = pins;
}
}
------------------------------------------
/**
* AMD CPU
* @author Administrator
*
*/
public class AmdCpu implements Cpu{
private int pins;
@Override
public void calculate() {
System.out.println("AMD Cpu针脚数:"+pins);
}
public AmdCpu(int pins){
this.pins = pins;
}
}
--------------------------------------------------------------------
/**
* 定义主板接口
* @author Administrator
*
*/
public interface MainBoard {
public void installCpu();
}
-----------------------------------------
/**
* Intel 主板
* @author Administrator
*
*/
public class IntelMainBoard implements MainBoard {
private int cpuHoles =0;
@Override
public void installCpu() {
System.out.println("Intel 主板的CPU插槽数是:"+cpuHoles);
}
public IntelMainBoard(int cpuHoles) {
super();
this.cpuHoles = cpuHoles;
}
}
------------------------------------------
/**
* AMD 主板
* @author Administrator
*
*/
public class AmdMainBoard implements MainBoard {
private int cpuHoles =0;
@Override
public void installCpu() {
System.out.println("AMD 主板的CPU插槽数是:"+cpuHoles);
}
public AmdMainBoard(int cpuHoles) {
super();
this.cpuHoles = cpuHoles;
}
}
---------------------------------------------------------------------------------------------------------------------------
com.android.abstract_factory包下
/**
* 抽象工厂
* @author Administrator
*
*/
public interface AbstractFactory {
public Cpu createCpu();
public MainBoard createMainBoard();
}
---------------------------------------
/**
* 定义Intel 工厂,使得cpu和主板相联系
* @author Administrator
*
*/
public class IntelFactory implements AbstractFactory {
@Override
public Cpu createCpu() {
return new IntelCpu(755);
}
@Override
public MainBoard createMainBoard() {
return new IntelMainBoard(755);
}
}
---------------------------------------------
/**
* 定义AMD 工厂,使得cpu和主板相联系
* @author Administrator
*
*/
public class AmdFactory implements AbstractFactory {
@Override
public Cpu createCpu() {
return new AmdCpu(938);
}
@Override
public MainBoard createMainBoard() {
return new AmdMainBoard(938);
}
}
------------------------------------------
/**
* 装机工程师
* @author Administrator
*
*/
public class ComputerEngineer {
private Cpu cpu = null;
private MainBoard mainBoard = null;
public void makeComputer(AbstractFactory abstractFactory){
prepare(abstractFactory);
}
private void prepare(AbstractFactory abstractFactory) {
cpu = abstractFactory.createCpu();
mainBoard = abstractFactory.createMainBoard();
cpu.calculate();
mainBoard.installCpu();
}
}
-------------------------------------------------------------------------------------------------------------------
/**
* 测试类
* @author Administrator
*
*/
public class Test {
public static void main(String[] args) {
ComputerEngineer engineer = new ComputerEngineer();
engineer.makeComputer(new IntelFactory());
engineer.makeComputer(new AmdFactory());
}
}