定义:讲一个复杂对象的构建与它的表示分离,使同样的构建构建过程可以创建不同的表达形式
使用场景:
(1)相同的方法不同的执行顺序,产生不同的事件结果时
(2)多个部件或零件,都可以装配到到一个对象中,但是产生的结果有不想同时
(3)产品非常的复杂,或者展品类中的调用顺序不同产生不同的作用,这个时候使用建造者只非常合适的
(4) 当初始化一个对象特别复杂。如参数特别多,且很多参数具有默认值的时候
我们都知道在android里面AlertDialog使用的就是建造者模式,虽然很少使用这个类了 但是我们可以尝试的仿造一下 并且我们做好养成一个好习惯 最写程序之间 画出自己的Uml 在根据Uml去实现整个代码。
我们根据AlerDialog的结构仿出自定义dialog的uml图
image.png
下面我们要做的就是把这个Uml转换成一个我们用建造模式实现的dialog
实现代码
public class CustomDialog extends Dialog {
//持有Builder
private static DialogBuilder builder;
private static class DialogParams {
private Context context;
//标题
private String title;
}
public static class DialogBuilder {
//持有Product对象
private DialogParams p;
DialogBuilder(Context context) {
p = new DialogParams();
p.context = context;
}
public DialogBuilder title(String text) {
p.title = text;
return builder;
}
void clear() {
p = null;
}
public CustomDialog create() {
return new CustomDialog(p);
}
//按钮点击回调
public interface ButtonClickLister {
void onClick(CustomDialog dialog);
}
}
public static DialogBuilder with(Context context) {
if (builder == null) {
builder = new DialogBuilder(context);
}
return builder;
}
private CustomDialog(DialogParams p) {
//设置没有标题的Dialog风格
super(p.context, R.style.my_dialog);
setContentView(R.layout.dialog_custom);
TextView title = findViewById(R.id.title_textview_canceldialog);
title.setText(p.title);
}
}
调用
CustomDialog.with(this).title("我是个逗逼").create().show();
这是是自己实现的一个一个建造的demo 顺便学着画类图 向往可以给大家带去更好的思路。
网友评论