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

2014-11-24 10:53:16 · 作者: · 浏览: 2
ctory {
public CPUApi createCPUApi() {
return new AMDCPU(939);
}

public MainBoardApi createMainBoardApi() {
return new MSIMainBoard(939);
}
}

package computer;

/**
* 装机方案二:AMD的CPU + 微星的主板
* 这里创建CPU和主板对象的时候,是对应的,能匹配上的
*/
public class Schema2 implements AbstractFactory {
public CPUApi createCPUApi() {
return new AMDCPU(939);
}

public MainBoardApi createMainBoardApi() {
return new MSIMainBoard(939);
}
}src\computer\ComputerEngineer.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[java]
package computer;

/**
* 装机工程师类
*/
public class ComputerEngineer {
/**
* 组装机器需要的CPU
*/
private CPUApi cpu = null;

/**
* 组装机器需要的主板
*/
private MainBoardApi mainBoard= null;

/**
* 装机过程
* @param schema 客户选择的装机方案
*/
public void makeComputer(AbstractFactory schema) {
// 1: 首先准备好装机所需要的配件
prepareHardwares(schema);
// 2: 组装机器
// 3: 测试机器
// 4: 交付客户
}

/**
* 准备装机所需要的配件
* @param schema 客户选择的装机方案
*/
public void prepareHardwares(AbstractFactory schema) {
// 这里要去准备CPU和主板的具体实现,简单起见,这里只准备这两个
// 可是,装机工程师并不知道如何去创建,怎么办呢?

// 使用抽象工厂来获取相应的接口对象
this.cpu = schema.createCPUApi();
this.mainBoard = schema.createMainBoardApi();

// 测试一下配件是否好用
this.cpu.calculate();
this.mainBoard.installCPU();
}
}

package computer;

/**
* 装机工程师类
*/
public class ComputerEngineer {
/**
* 组装机器需要的CPU
*/
private CPUApi cpu = null;

/**
* 组装机器需要的主板
*/
private MainBoardApi mainBoard= null;

/**
* 装机过程
* @param schema 客户选择的装机方案
*/
public void makeComputer(AbstractFactory schema) {
// 1: 首先准备好装机所需要的配件
prepareHardwares(schema);
// 2: 组装机器
// 3: 测试机器
// 4: 交付客户
}

/**
* 准备装机所需要的配件
* @param schema 客户选择的装机方案
*/
public void prepareHardwares(AbstractFactory schema) {
// 这里要去准备CPU和主板的具体实现,简单起见,这里只准备这两个
// 可是,装机工程师并不知道如何去创建,怎么办呢?

// 使用抽象工厂来获取相应的接口对象
this.cpu = schema.createCPUApi();
this.mainBoard = schema.createMainBoardApi();

// 测试一下配件是否好用
this.cpu.calculate();
this.mainBoard.installCPU();
}
}src\user\Client.java
~~~~~~~~~~~~~~~~~~~~

[java]
package user;

import computer.AbstractFactory;
import computer.ComputerEngineer;
import computer.Schema1;

public class Client {
public static void main(String[] args) {
// 创建装机工程师对象
ComputerEngineer engineer = new ComputerEngineer();

// 客户选择并创建需要使用的装机方案
AbstractFactory schema = new Schema1();

// 告诉装机工程师自己选择的装机方案,让装机工程师组装电脑
engineer.makeComputer(schema);
}
}

package user;

import computer.AbstractFactory;
import computer.ComputerEngineer;
import computer.Schema1;

public class Client {
public static void main(String[] args) {
// 创建装机工程师对象
ComputerEngineer engineer = new ComputerEngineer();

// 客户选择并创建需要使用的装机方案
AbstractFactory schema = new Schema1();

// 告诉装机工程师自己选择的装机方案,让装机工程师组装电脑
engineer.makeComputer(schema);
}
}
@@@抽象工厂模式的实现:
1. 实现成接口

@@@抽象工厂模式的优点:
1. 分离接口和实现
2. 使得切换产品簇变得容易

@@@抽象工厂模式的缺点:
1. 不太容易扩展新的产品
2. 容易造成类层次复杂

@@@抽象工厂模式的本质:
选择产品簇的实现

@@@抽象工厂模式体现的设计原则:
依赖倒置原则
最少知识原则