美文网首页设计模式
Builder设计模式——化妆师

Builder设计模式——化妆师

作者: 0ur | 来源:发表于2019-01-07 22:33 被阅读0次
cover

创建型模式之一

定义:将一个复杂的对象的构建和它的表示分开,使得同样的构建过程可以创建不同的表示。

使用场景:
1,相同的方法,不同的执行顺序,产生的事件结果不一样。
2,多个部件和零件,都可以装配到一个对象中,运行产生的结果又不相同。
3,某类非常复杂,参数过多并且很多参数都有默认值。或者某类中的调用顺序不同产生的作用不同。

优点:
1,将配置从目标类隔离出来,避免了过多的setter()方法,容易扩展。
2,良好的封装性,让调用者不必知道内部组成的细节

缺点:会产生多余的Builder对象。

简单实现:

/**
 * 美女类
 */
public class Belle {

    //隔离霜
    private String mSunScreen;
    //粉底
    private String mFoundation;
    //眼影
    private String EyeShadows;
    //口红
    private String mLmipstick;

    public Belle(Builder builder) {
        this.mSunScreen = builder.mSunScreen;
        this.mFoundation = builder.mFoundation;
        this.EyeShadows = builder.mEyeShadows;
        this.mLmipstick = builder.mLmipstick;

    }

    @Override
    public String toString() {
        return "Belle{" +
                "mSunScreen='" + mSunScreen + '\'' +
                ", mFoundation='" + mFoundation + '\'' +
                ", EyeShadows='" + EyeShadows + '\'' +
                ", mLmipstick='" + mLmipstick + '\'' +
                '}';
    }

    public static class Builder {

        private String mSunScreen = "SunScreen";
        private String mFoundation = "Foundation";
        private String mEyeShadows = "EyeShadows";
        private String mLmipstick = "Lmipstick";

        public Builder() {
        }

        /**
         * 隔离霜
         *
         * @param sunScreen
         */
        public Builder setSunScreen(String sunScreen) {
            this.mSunScreen = sunScreen;
            return this;
        }


        /***
         * 设置粉底
         * @param foundation
         */
        public Builder setFoundation(String foundation) {
            this.mFoundation = foundation;
            return this;
        }


        /**
         * 设置眼影
         *
         * @param eyeshadows
         */
        public Builder setEyeShadows(String eyeshadows) {
            this.mEyeShadows = eyeshadows;
            return this;
        }


        /**
         * 设置口红
         *
         * @param lmipstick
         */
        public Builder setLmipstick(String lmipstick) {
            this.mLmipstick = lmipstick;
            return this;
        }


        public Belle build() {
            return new Belle(this);
        }

    }
}

如有出入,往大佬扶正,谢谢!!!

相关文章

网友评论

    本文标题:Builder设计模式——化妆师

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