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

建造者模式--介绍、应用及代码

2014-02-27 10:06 387 查看
定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

特征:

产品类:封装创建对象的具体过程,具体类非抽象类

抽象建造者:将建造的具体过程交予它的子类实现,一般至少两个抽象方法:建造产品,返回产品

建造者:实现抽象类的所有未实现的方法:组件产品、返回组建好的产品

导演类:将产品创建跟客户分离,也是建造者模式的核心,它直接与建造者交互,而不与产品类交互。一般封装程序中易变的部分。

实例:

去电脑城买电脑,你给了价格,让导购帮你组装一台电脑,导购会帮你去几家电脑店看看,每一家组装电脑配置也不同,你选择你满意的。其中:

产品类--电脑 导演类:导购 建造者:N家电脑店 抽象建造者:电脑组装过程抽象

代码如下:

//产品类--电脑
public class Computer {
private String name;
private String price;
private String type;
public void shwoComputer(){
System.out.println("名称:"+name);
System.out.println("价格:"+price);
System.out.println("类型:"+type);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}

//抽象建造者--组装并返回电脑的过程抽象
public abstract class Builder {
public abstract void setComputer(String name,String price,String type);
public abstract Computer getComputer();
}

//具体建造者--组装电脑的实体店1
public class BuilderShop1 extends Builder {

private Computer computer=new Computer();
@Override
public void setComputer(String name1, String price1, String type1) {
// TODO Auto-generated method stub
computer.setName(name1);
computer.setPrice(price1);
computer.setType(type1);
}

@Override
public Computer getComputer() {
// TODO Auto-generated method stub
return computer;
}

}

//具体建造者--组装电脑的实体店2
public class BuilderShop2 extends Builder {

private Computer computer=new Computer();
@Override
public void setComputer(String name2, String price2, String type2) {
// TODO Auto-generated method stub
computer.setName(name2);
computer.setPrice(price2);
computer.setType(type2);
}

@Override
public Computer getComputer() {
// TODO Auto-generated method stub
return computer;
}

}

//导演类--导购,又可以说是建造者的指挥者
public class Director {
private Builder builder1=new BuilderShop1();
private Builder builder2=new BuilderShop2();
public Computer getAComputer(){
builder1.setComputer("华硕", "4000", "台式");
return builder1.getComputer();
}

public Computer getBComputer(){
builder2.setComputer("戴尔", "4000", "笔记本");
return builder2.getComputer();
}
}

public class BuilderPattern {
/**
* @param args
*/
public static void main(String[] args) {
//进赛格电脑城找一导购
Director director=new Director();
//你说了一个价格,导购去两个店子给你组装了两台电脑
String price="4000";
Computer computer1=director.getAComputer();
computer1.shwoComputer();
Computer computer2=director.getBComputer();
computer2.shwoComputer();
//电脑配置你看完以后,参照你自己的价格标准最终选择一台
//至始至终,你跟导购其实都不关心电脑是如何组装的,你们只关心最后组装完成后的电脑是否符合你的要求
//剩下的事情就是你自己选择一台电脑了
}

}
说说建造者模式跟工厂模式的异同

两者极为相似,总体上,建造者模式比工厂模式就多了一个“导演类”,其实可以把工厂模式中的暴发户当做导演类理解。

不同的是,工厂模式产品创建过程封装在工厂类中,建造者模式产品创建封装在导演类中,具体创建过程由导演类指挥建造者进行。

总结:产品建造复杂?用工厂模式! 产品建造非常复杂?用建造者模式!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息