标题: 深入构建(生成器)模式 [打印本页] 作者: liumeng 时间: 2012-3-2 11:02 标题: 深入构建(生成器)模式 将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示。 比如房屋类,构建类
abstract class House{};
abstract class Door{};
abstract class Builder
{
public Window createWindow(){};
public Door createDoor(){};
public House getHouse(){};
}
与抽象工厂的区别作者: 姚鑫 时间: 2012-3-2 12:47
构建(生成器模式)又叫建造者模式。举个例子,假如你想组装电脑,假设电脑就两个部件(CPU和主板)。由于你不会组装电脑,所以必须去电脑城找人组装。这时你有一个担心,担心别人坑你,偷工减料,只装了CPU或主板,或什么也没干给你个电脑壳。这时,你可以使用生成器模式来防止这样的事发生。示例代码如下:
public class Computer {
List<String> parts = new ArrayList<String>();
public void Add(String part){
parts.add(part);
}
}
public abstract class Builder { //这个抽象类就是你给装机人员定义的规则,不符合规则的不能给我装机
public abstract void AddCPU();
public abstract void AddMainBoard();
}
public class Person1 extends Builder {
public Computer pc = new Computer();
public void AddCPU() {
pc.Add("Intel_CPU");
}
public void AddMainBoard() {
pc.Add("Intel_MainBoard");
}
}
public class Person2 extends Builder {
public Computer pc = new Computer();
public void AddCPU() {
pc.Add("AMD_CPU");
}
public void AddMainBoard() {
pc.Add("AMD_MainBoard");
}
}
public class Director {
public void zhuangPc(Builder builder){
builder.AddCPU();
builder.AddMainBoard();
}
}
public class Test {
public static void main(String[] args) {
Director I = new Director();
Person1 p1 = new Person1();
Person2 p2 = new Person2();
I.zhuangPc(p1);
// I.zhuangPc(p2);
}
}
*******************************************************************************************************************************************
与抽象工厂设计模式(http://bbs.itheima.com/thread-7809-1-1.html)的区别:
① 建造者模式更注重产品的规则,比如规定符合要求的产品必须有什么部分组成,而抽象工厂设计模式更注重工厂的规则,比如规定符合要求的工厂必须能生产什么产品。
② 两种设计模式的目的不同:建造者模式其实重点利用了接口或抽象类的定义规范这一作用,要的只是一种规范。抽象工厂设计模式重点利用了接口或抽象类的多态这一作用,要的是具体类和代码的分离,便于实现不同工厂之间的转化。