【学习设计模式+手写】建造者模式

建造者模式:
优点:
使用建造者模式可以使客户端不必知道产品内部组成的细节。
具体的建造者类之间是相互独立的,这有利于系统的扩展。
具体的建造者相互独立,因此可以对建造的过程逐步细化,而不会对其他模块产生任何影响。

缺点:

建造者模式所创建的产品一般具有较多的共同点,其组成部分相似;如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制。

如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。

适用场景:

产品类非常复杂或者产品类因为调用顺序不同而产生不同作用
初始化一个对象时,参数过多,或者很多参数具有默认值
Builder模式不适合创建差异性很大的产品类
产品内部变化复杂,会导致需要定义很多具体建造者类实现变化,增加项目中类的数量,增加系统的理解难度和运行成本
需要生成的产品对象有复杂的内部结构,这些产品对象具备共性;

值得一提的是建造者模式和静态内部类非常契合,使用静态内部类来完成建造者模式非常合适

以建造一个学生为例

/**
 * @author Jay
 * @date 2020/7/15 16:29
 * @Description:
 */
public class Student {
    private String name;
    private String study;
    private int hight;
    private int weight;
    private int IQ;
    private int EQ;
    public Student(Builder builder){

        this.name=builder.name;
        this.weight=builder.weight;
        this.hight=builder.hight;
        this.EQ=builder.EQ;
        this.IQ=builder.IQ;
        this.study=builder.study;

    }
    public static class Builder{
        private String name;
        private String study;
        private int hight;
        private int weight;
        private int IQ;
        private int EQ;
        public Builder(){
        }

        public Builder Name(String val){
            this.name=val;
            return this;
        }
        public Builder IQ(int val){
            this.IQ=val;
            return this;
        }  public Builder EQ(int val){
            this.EQ=val;
            return this;
        }  public Builder Hight(int val){
            this.hight=val;
            return this;
        }
        public Builder Weight(int val){
            this.weight=val;
            return this;
        }
        public Builder Study(String val){
            this.study=val;
            return this;
        }
        public Student build(){
            return new Student(this);
        }



    }
}

测试类

/**
 * @author Jay
 * @date 2020/7/15 16:39
 * @Description:
 */
public class StudentMain {
    public static void main(String[] args) {
        Student student=new Student.Builder()
                .EQ(80)
                .Hight(176)
                .IQ(80)
                .Name("LiHua")
                .Study("math")
                .Weight(132)
                .build();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值