标签:
<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>建造者bulider
public 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