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

资料来源于《Android设计模式》和网友资料
1、建造者模式的意义
在构建时,对外部隐藏内部细节,将构建过程和部件都可以进行扩展,使他们的耦合程度降低。

2、使用场景
(1)相同的方法,执行不同的顺序,产生不同的事件结果
(2)多个部件或零件,都可以装配到一个对象中,但是产生的结果又不一样
(3)产品类非常复杂,或者产品类的调用顺序不同产生了不同的作用
(4)当初始化一个对象特别复杂,参数很多,很多参数都有默认值时。

3、使用示例

//我们一般使用的方式
 public class Person{
    private String name;
    private int age;
    private double height;
    //一般我们就创建这几个属性的构造方法
    public Person(String name,int age,double height){
        this.name = name;
        this.age = age;
        this.height= height;
    }
    //....一堆get、set方法
}

使用的时候就会:
Person person = new Person(“xx”,18,170);
这事一般的使用方式,或者也会加入其他的构造方法。。但是使用起来很不方便!!!这就需要建造者模式了

//建造者的写法
 public class Person{
    private String name;
    private int age;
    private double height;
    //一般我们就创建这几个属性的构造方法
    private Person(Builder bulider){
        this.name =bulider.name;
        this.age = bulider.age;
        this.height=bulider.height;
    }
    //....一堆get、set方法
    //静态的Bulider类
    static class Bulider{
        private String name;
        private int age;
        private double height;

        public Bulider name(String name){
            this.name= name;
            return this;
        }
        public Bulider age(int age){
            this.age = age;
            return this;
        }
        public Bulider height(double height){
            this.height= height;
            return this;
        }
        //最重要!!!!
        public Person builder(){
            return new Person(this);
        }
    }

}

最后我们的使用方式就变成了:
Person.Builder builder = new Person.Builder()
Person person = builer.name(“xxx”)
.age(18)
.height(123)
.build(); //创建对象
关键在于:
1、定义一个静态的内部类Builder,内部类的成员变量和外部类的成员相同
2、Builder类通过getset方法操作成员变量,并返回对象本身。
3、Builder提供一个Builder方法创建外部类,该方法调用外部私有的构造方法,外部类的私有方法就是Bulider对象。
外部类提供一个私有的构造方法,在方法中完成赋值等操作(把Builder对象的值赋值给外部类对象成员)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值