您的位置:首页 > 编程语言 > Java开发

java设计模式连载(3) --建造者模式

2011-08-12 22:41 453 查看
java设计模式连载(3) --建造者模式

意图:

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

适用性:

当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
当构造过程必须允许被构造的对象有不同的表示时。

实例:

1. 定义一个计算机构建者接口

package Builder_Pattern;

public interface  ComputerBuilder {

public  void buildDisplayer();

public  void buildMainframe();

public  void buildDataline();

public  Computer  buildComputer();

}


2. 定义一个通用计算机类

package Builder_Pattern;

public class Computer{

private String displayer;

private String mainframe;

private String dataline;

public String getDisplayer() {
return displayer;
}

public void setDisplayer(String displayer) {
this.displayer = displayer;
}

public String getMainframe() {
return mainframe;
}

public void setMainframe(String mainframe) {
this.mainframe = mainframe;
}

public String getDataline() {
return dataline;
}

public void setDataline(String dataline) {
this.dataline = dataline;
}

}


3. 定义一个主管,管理构建计算机的人

package Builder_Pattern;

public class  ComputerDirector {

public  Computer   constructComputer(ComputerBuilder  cb){
cb.buildDisplayer();
cb.buildMainframe();
cb.buildDataline();
return  cb.buildComputer();
}
}


4. 定义一个PC机 ,继承通用计算机这个类。或者可以再定义大型计算机

package Builder_Pattern;

public class  PC  extends Computer{

}


5. 定义一个专门建造PC机的构造者

package Builder_Pattern;

public class  PCBuilder  implements ComputerBuilder {

private  Computer computer;

public    PCBuilder(){
computer =   new PC();
}

@Override
public Computer buildComputer() {

return   computer;
}

@Override
public void buildDataline() {

computer.setDataline("构建个人计算机数据线");

}

@Override
public void buildDisplayer() {

computer.setDisplayer("构建个人计算机显示器");
}

@Override
public void buildMainframe() {

computer.setMainframe("构建个人计算机主机");
}
}


6. 测试这个模式

package Builder_Pattern;

public class Test{

public static void main(String[] args) {
//实例化一个计算机构建者
ComputerDirector computerDirector = new ComputerDirector();

Computer computer = computerDirector.constructComputer( new PCBuilder());

System.out.println(computer.getDisplayer());
System.out.println(computer.getMainframe());
System.out.println(computer.getDataline());

}
}


7. 多谢浏览,欢迎斧正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: