抽象工厂模式(Abstract Factory) (三)

2014-11-24 10:53:16 · 作者: · 浏览: 3
ype);

// 测试一下配件是否好用
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