Android -建造者模式
今天我们来聊一聊我们经常用到的模式-建造者模式(Builder Pattern).
一:
1.什么是建造者模式?
建造者模式 的定义是:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 [构建与表示分离,同构建不同表示]。
比如我们常见的AlertDialog,Glide等都是运用的建造者模式,拿Glide来说:
Glide.with(this).load(R.drawable.ic_launcher).into(iv); 没有通过new的方式,然后一个一个set其属性。而是通过这种链式的调用赋值,然后达到给相关对象赋值的目的。
当然AlertDialog创建会更明显:
new AlertDialog.Builder(this)
.setTitle("标题")
.setMessage("内容")
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override public void onClick(DialogInterface dialog, int which) {
}
})
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override public void onClick(DialogInterface dialog, int which) {
}
})
.create().show();
2.构造者模式有什么好处?
建造模式是将复杂创建过程封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心,也不知道,具有良好的封装性,可以使客户端不用知道产品内部组成的细节。.建造者独立,容易扩展。就是解耦。
3.建造者模式的构成,一般的建造者模式由四部分构成。
Product:被构造的复杂对象
Builder:抽象接口
ConcreteBuildr:Builder接口的具体实现
Director:Builder接口的构造者和使用者
但我一般在开发过程中,跟传统开发者模式不太一样,做了一点点改变。但本质都是一样的,话不多说,撸代码。
二:代码部分。
先说一说我们的思路:我们这里要做一个学生管理系统,每个新入职的学生都必须填写自己的姓名,性别,年龄,手机号(选填),地址(选填),兴趣爱好(选填)”然后获取相关学生对象,如果传统方式就是创建Student对象,然后一个一个set(),get()啦,我们来看一看如何用建造者模式实现。
第一步:创建StudentConfig配置类
第二步:我们再看看内部类StudentBuilder;
也没啥说的!
效果:
调用代码:StudentConfig studentConfigOne=new StudentConfig.StudentBuilder("张三","男","20").setAddress("恒 山").setPhone("12345678910").setHobby("传统武术").createStudentConfig();
总结:
这就是稍微变动后的Builder Pattern,在开发比较常用,通常作为配置类的构建器将配置的构建和表示分离,通过链式实现使得代码更简洁、易懂。缺点呢就是会产生多余的Builder对象消耗内存,不过优点大于缺点。