// 测试一下配件是否好用
this.cpu.calculate();
this.mainBoard.installCPU();
}
}
package computer;
/**
* 装机工程师类
*/
public class ComputerEngineer {
/**
* 组装机器需要的CPU
*/
private CPUApi cpu = null;
/**
* 组装机器需要的主板
*/
private MainBoardApi mainBoard= null;
/**
* 装机过程
* @param cpuType 客户选择所需的CPU类型
* @param mainBoardType 客户选择所需的主板类型
*/
public void makeComputer(int cpuType, int mainBoardType) {
// 1: 首先准备好装机所需要的配件
prepareHardwares(cpuType, mainBoardType);
// 2: 组装机器
// 3: 测试机器
// 4: 交付客户
}
/**
* 准备装机所需要的配件
* @param cpuType 客户选择所需的CPU类型
* @param mainBoardType 客户选择所需的主板类型
*/
public void prepareHardwares(int cpuType, int mainBoardType) {
// 这里要去准备CPU和主板的具体实现,简单起见,这里只准备这两个
// 可是,装机工程师并不知道如何去创建,怎么办呢?
// 直接找相应的工厂获取
this.cpu = CPUFactory.createCPUApi(cpuType);
this.mainBoard = MainBoardFactory.createMainBoardApi(mainBoardType);
// 测试一下配件是否好用
this.cpu.calculate();
this.mainBoard.installCPU();
}
}src\user\Client.java
~~~~~~~~~~~~~~~~~~~~
[java]
package user;
import computer.ComputerEngineer;
public class Client {
public static void main(String[] args) {
// 创建装机工程师对象
ComputerEngineer engineer = new ComputerEngineer();
// 告诉装机工程师自己选择的配件,让装机工程师组装电脑
engineer.makeComputer(1, 1);
}
}
package user;
import computer.ComputerEngineer;
public class Client {
public static void main(String[] args) {
// 创建装机工程师对象
ComputerEngineer engineer = new ComputerEngineer();
// 告诉装机工程师自己选择的配件,让装机工程师组装电脑
engineer.makeComputer(1, 1);
}
}
------------------------------------------------------------------------------------------------------------------
不使用模式时存在的问题 :
CPU对象和主板对象是有关系的,是需要相互匹配的。
------------------------------------------------------------------------------------------------------------------
src\computer\AbstractFactory.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[java]
package computer;
/**
* 抽象工厂的接口,声明创建抽象产品对象的操作
*/
public interface AbstractFactory {
/**
* 创建CPU的对象
* @return CPU的对象
*/
public CPUApi createCPUApi();
/**
* 创建主板的对象
* @return 主板的对象
*/
public MainBoardApi createMainBoardApi();
}
package computer;
/**
* 抽象工厂的接口,声明创建抽象产品对象的操作
*/
public interface AbstractFactory {
/**
* 创建CPU的对象
* @return CPU的对象
*/
public CPUApi createCPUApi();
/**
* 创建主板的对象
* @return 主板的对象
*/
public MainBoardApi createMainBoardApi();
}src\computer\Schema1.java
~~~~~~~~~~~~~~~~~~~~~~~~~
[java]
package computer;
/**
* 装机方案一:Intel的CPU + 技嘉的主板
* 这里创建CPU和主板对象的时候,是对应的,能匹配上的
*/
public class Schema1 implements AbstractFactory {
public CPUApi createCPUApi() {
return new IntelCPU(1156);
}
public MainBoardApi createMainBoardApi() {
return new GAMainBoard(1156);
}
}
package computer;
/**
* 装机方案一:Intel的CPU + 技嘉的主板
* 这里创建CPU和主板对象的时候,是对应的,能匹配上的
*/
public class Schema1 implements AbstractFactory {
public CPUApi createCPUApi() {
return new IntelCPU(1156);
}
public MainBoardApi createMainBoardApi() {
return new GAMainBoard(1156);
}
}src\computer\Schema2.java
~~~~~~~~~~~~~~~~~~~~~~~~~
[java]
package computer;
/**
* 装机方案二:AMD的CPU + 微星的主板
* 这里创建CPU和主板对象的时候,是对应的,能匹配上的
*/
public class Schema2 implements AbstractFa