设计模式-建造篇(建造者模式)

建造者模式

建造者:创建和提供实例,导演:管理建造出来的实例的依赖关系。
我们想要买汽车 - 奥迪A6,去了4S店以后,我们发现这玩意根据不同的套餐价格也是不一样的。车的大体没有改变,但是内部设置却不同了。
【设计模式-建造篇(建造者模式)】奥迪A6 :
20万 配置 沙发和空调
30万 配置 空调和美女
40万 配置 美女和电脑
/** * Created by malei on 2016/12/5. */ public class HuaweiCompany { private String ceo; private String cto; private String cao; /*构造方法中持有建造者对象 * 导演:管理建造出来的实例的依赖关系。*/ public HuaweiCompany(CompanyBuilder builder){ this.ceo = builder.ceo; this.cto = builder.cto; this.cao = builder.cao; }/*需要被构建的对象只提供 getter 方法*/ public String getCeo(){ return ceo; } public String getCto() { return cto; } public String getCao() { return cao; }/*建造者作为静态内部类使用 * 建造者:创建和提供实例*/ public static class CompanyBuilder{ private String ceo; private String cto; private String cao; /*按需为建造者提供不同的构造方法*/ public CompanyBuilder(String ceo){ this.ceo = ceo; } public CompanyBuilder(){ }/*返回被构建的对象*/ public HuaweiCompany build(){ return new HuaweiCompany(this); }/*只提供 setter 方法*/ public CompanyBuilder setCeo(String ceo) { this.ceo = ceo; return this; }public CompanyBuilder setCto(String cto) { this.cto = cto; return this; }public CompanyBuilder setCao(String cao) { this.cao = cao; return this; } }private void say() { Log.show("ceo="+ceo + "\ncto="+cto+"\ncao="+cao); }public static void main(String[] args){ HuaweiCompany buidler = new CompanyBuilder() .setCeo("马磊") .setCto("马云") .setCao("马化腾").build(); buidler.say(); } }

    推荐阅读