美文网首页程序员
设计模式-建造篇(建造者模式)

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

作者: 小酷哥 | 来源:发表于2017-02-10 14:21 被阅读0次
    建造者模式

    建造者:创建和提供实例,导演:管理建造出来的实例的依赖关系。

    我们想要买汽车 - 奥迪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();
        }
    }
    

    相关文章

      网友评论

        本文标题:设计模式-建造篇(建造者模式)

        本文链接:https://www.haomeiwen.com/subject/jbvgittx.html