黑马程序员技术交流社区

标题: 深入构建(生成器)模式 [打印本页]

作者: 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)的区别:
① 建造者模式更注重产品的规则,比如规定符合要求的产品必须有什么部分组成,而抽象工厂设计模式更注重工厂的规则,比如规定符合要求的工厂必须能生产什么产品。
② 两种设计模式的目的不同:建造者模式其实重点利用了接口或抽象类的定义规范这一作用,要的只是一种规范。抽象工厂设计模式重点利用了接口或抽象类的多态这一作用,要的是具体类和代码的分离,便于实现不同工厂之间的转化。









欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2