标签:
J{O2.png)
J{O2.png)
J{O2.png)
J{O2.png)
J{O2.png)
J{O2.png)
J{O2.png)
J{O2.png)
<span style="font-family:Courier New;font-size:18px;">public class MobileProduct {
private String 流量;
private String 通话;
private String 短信;
private String 定向流量;
public String get流量() {
return 流量;
}
public void set流量(String 流量) {
this.流量 = 流量;
}
public String get通话() {
return 通话;
}
public void set通话(String 通话) {
this.通话 = 通话;
}
public String get短信() {
return 短信;
}
public void set短信(String 短信) {
this.短信 = 短信;
}
public String get定向流量() {
return 定向流量;
}
public void set定向流量(String 定向流量) {
this.定向流量 = 定向流量;
}
}</span>
套餐1<span style="font-family:Courier New;font-size:18px;">public class One58 extends MobileProduct {
}</span>套餐2<span style="font-family:Courier New;font-size:18px;">public class Two58 extends MobileProduct{
}</span>
建造者buliderpublic interface Bulider {
public void bulid流量();
public void bulid通话();
public void bulid短信();
public void bulid定向流量();
public MobileProduct getProduct();
}实现套餐1的构造<span style="font-family:Courier New;font-size:18px;">public class One58Impl implements Bulider{
private MobileProduct product ;
public One58Impl(){
product = new One58();
}
public void bulid流量() {
// TODO Auto-generated method stub
product.set流量("套餐一:500M");
}
public void bulid通话() {
// TODO Auto-generated method stub
product.set通话("套餐一:100分钟");
}
public void bulid短信() {
// TODO Auto-generated method stub
product.set短信("套餐一:20条");
}
public void bulid定向流量() {
// TODO Auto-generated method stub
product.set定向流量("套餐一:15G");
}
public MobileProduct getProduct() {
// TODO Auto-generated method stub
return product;
}</span><span style="font-family:Courier New;font-size:18px;">public class Two58Impl implements Bulider{
private MobileProduct product;
public Two58Impl(){
product = new Two58();
}
public void bulid流量() {
// TODO Auto-generated method stub
product.set流量("套餐二:700M");
}
public void bulid通话() {
// TODO Auto-generated method stub
product.set通话("套餐二:50分钟");
}
public void bulid短信() {
// TODO Auto-generated method stub
product.set短信("套餐二:10条");
}
public void bulid定向流量() {
// TODO Auto-generated method stub
product.set定向流量("套餐二:5G");
}
public MobileProduct getProduct() {
// TODO Auto-generated method stub
return product;
}</span>
<span style="font-family:Courier New;font-size:18px;">public class Director {
public MobileProduct getProduct(Bulider bulid){
bulid.bulid定向流量();
bulid.bulid流量();
bulid.bulid短信();
bulid.bulid通话();
return bulid.getProduct();
}
}</span>测试代码<span style="font-family:Courier New;font-size:18px;">public class Test {
public static void main(String[] args) {
Director director = new Director();
Bulider bulid = new One58Impl();
MobileProduct product = director.getProduct(bulid);
System.out.println("套餐一的详情:");
System.out.println(product.get定向流量());
System.out.println(product.get流量());
System.out.println(product.get短信());
System.out.println(product.get通话());
bulid = new Two58Impl();
product = director.getProduct(bulid);
System.out.println("套餐二的详情:");
System.out.println(product.get定向流量());
System.out.println(product.get流量());
System.out.println(product.get短信());
System.out.println(product.get通话());
}
}</span>//结果<span style="font-family:Courier New;font-size:18px;">套餐一的详情: 套餐一:15G 套餐一:500M 套餐一:20条 套餐一:100分钟 套餐二的详情: 套餐二:5G 套餐二:700M 套餐二:10条 套餐二:50分钟</span>
1. 一个部分是Builder接口,这里是定义了如何构建各个部件,也就是知道每个部件功能如何实现,以及如何装配这些部件到产品中去;
2. 另外一个部分是Director,Director是知道如何组合来构建产品,也就是说Director负责整体的构建算法,而且通常是分步骤地来执行。
不管如何变化,建造模式都存在这么两个部分,一个部分是部件构造和产品装配,另一个部分是整体构建的算法。认识这点是很重要的,因为在建造模式中,强调的是固定整体构建的算法,而灵活扩展和切换部件的具体构造和产品装配的方式。
再直白点说,建造模式的重心在于分离构建算法和具体的构造实现,从而使得构建算法可以重用。具体的构造实现可以很方便地扩展和切换,从而可以灵活地组合来构造出不同的产品对象。
Bulider和Director这二个是固定的东西。其余的都是业务的扩展。上面的demo中如果还有第三种套餐的话,也是很容易扩展的。无需修改其他的东西。这个就是封装。标签:
原文地址:http://blog.csdn.net/cn_wanny/article/details/51316998