Java创建对象(重叠构造器模式,javaBean模式,Builder模式)

重叠构造器模式,javaBean模式,Builder模式的优缺点

模式优点缺点
重叠构造器模式形式简单容易出错,参数表太长不容易控制,而且难以阅读
javaBean模式容易阅读,创建实例比较容易构造过程被分割到好多个set中容易造成线程不安全,导致对象处于不一致的状态
Builder模式代码容易编写创建对象,必须先创造构建器,造成一定的性能上的开销

示例代码:

//重叠构造器模式
class MyClass1{
    //必要的参数
    private final int one;
    private final int two;
    //可选的参数
    private final int three;
    private final int four;
    private final int five;
    private final int six;
    public MyClass1(int one,int two){
        this(one,two,0);
    }
    public MyClass1(int one,int two,int three){
        this(one,two,three,0);
    }   
    public MyClass1(int one,int two,int three,int four){
        this(one,two,three,four,0);
    }   
    public MyClass1(int one,int two,int three,int four,int five){
        this(one,two,three,four,five,0);
    }   
    public MyClass1(int one,int two,int three,int four,int five,int six){
        this.one=one;
        this.two=two;
        this.three=three;
        this.four=four;
        this.five=five;
        this.six=six;
    }   
    @Override
    public String toString(){
        return " one="+this.one+" two="+this.two+" three="+this.three+" four="+this.four+" five="+this.five+" six="+this.six;
    }
}
//JavaBean模式
class MyClass2{
    //必要的参数
    private int one=0;
    private int two=0;
    //可选的参数
    private int three=0;
    private int four=0;
    private int five=0;
    private int six=0;

    public MyClass2(){}

    public void setOne(int one){this.one=one;}
    public void setTwo(int two){this.two=two;}
    public void setThree(int three){this.three=three;}
    public void setFour(int four){this.four=four;}
    public void setFive(int five){this.five=five;}
    public void setSix(int six){this.six=six;}
    @Override
    public String toString(){
        return " one="+this.one+" two="+this.two+" three="+this.three+" four="+this.four+" five="+this.five+" six="+this.six;
    }

}
//构建器模式
class MyClass3{
    //必要的参数
    private final int one;
    private final int two;
    //可选的参数
    private final int three;
    private final int four;
    private final int five;
    private final int six;

    public static class Builder{//静态内部类,也可以使用外部类,
        //必要的参数
        private final int one;
        private final int two;
        //可选的参数
        private  int three=0;
        private  int four=0;
        private  int five=0;
        private  int six=0;
        public Builder(int one,int two){
            this.one=one;
            this.two=two;
        }
        public Builder Three(int three){
            this.three=three;
            return this;//每次返回当前对象,以便后面继续调用更多初始化方法
        }
        public Builder Four(int four){
            this.four=four;
            return this;//每次返回当前对象,以便后面继续调用更多初始化方法
        }
        public Builder Five(int five){
            this.five=five;
            return this;//每次返回当前对象,以便后面继续调用更多初始化方法
        }
        public Builder Six(int six){
            this.six=six;
            return this;//每次返回当前对象,以便后面继续调用更多初始化方法
        }
        public MyClass3 build(){
            return new MyClass3(this);
        }
    }
    private MyClass3(Builder builder){
        this.one=builder.one;
        this.two=builder.two;
        this.three=builder.three;
        this.four=builder.four;
        this.five=builder.five;
        this.six=builder.six;
    }
    @Override
    public String toString(){
        return " one="+this.one+" two="+this.two+" three="+this.three+" four="+this.four+" five="+this.five+" six="+this.six;
    }
}

public class MyBuilderMain{
    public static void main(String[]args){
        //初始化MyClass1
        MyClass1 myclass1=new MyClass1(1,2,3,4,5,6);
        System.out.println(myclass1.toString());
        //初始化MyClass2
        MyClass2 myclass2=new MyClass2();
        myclass2.setOne(1);
        myclass2.setTwo(2);
        myclass2.setThree(3);
        myclass2.setFour(4);
        myclass2.setFive(5);
        myclass2.setSix(6);
        System.out.println(myclass2.toString());
        //初始化MyClass3
        MyClass3 myclass3=new MyClass3.Builder(1,2).Three(3).Four(4).Five(5).Six(6).build();
        System.out.println(myclass3.toString());
    }
}

输出结果:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值