资料来源于《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对象的值赋值给外部类对象成员)