美文网首页程序员
设计模式-创建型-构建者模式

设计模式-创建型-构建者模式

作者: 辞令 | 来源:发表于2018-03-12 22:52 被阅读17次

基本概念:

  1. 构建者模式的定义
    将构建的过程和表示过程进行分离
    构建的过程:隐藏
    表示过程 : 开放
  2. 构建者模式的场景
    创建一个复杂的对象,同时改复杂对象有很多默认值(初始化)的时候,可以使用构建者模式。(典型:给对象设置可选参数)
  3. 构建者模式案例
    AlretDialog
  4. 构建者模式-UML类图结构
    4.1 分析角色划分
    角色一:产品
    角色二:抽象构建者
    角色三:具体构建者
    角色四:组装
 public class ComListDialog extends Dialog {
            public static Context mContext;
            private TextView btnCancel;
            private LinearLayout lyContents;
             private static List<CommonListMenuItem> btnMenu;
          public ComListDialog(@NonNull Context context) {
        super(context, R.style.common_dialog);
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Window win = getWindow();
        win.getDecorView().setPadding(0, 0, 0, 0);
        WindowManager.LayoutParams lp = win.getAttributes();
        lp.width = WindowManager.LayoutParams.MATCH_PARENT;
        lp.height = WindowManager.LayoutParams.MATCH_PARENT;

        win.setWindowAnimations(R.style.listDialogWindowAnim);

        win.setAttributes(lp);

        setContentView(R.layout.common_list_dialog);
        setCanceledOnTouchOutside(true);
        setCancelable(true);

        findViewById(R.id.menu_base_content).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dismiss();
            }
        });
        btnCancel = (TextView) findViewById(R.id.menu_cancel);
        btnCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dismiss();
            }
        });

        lyContents = (LinearLayout) findViewById(R.id.menu_content);
        if (btnMenu != null && btnMenu.size() > 0) {
            for (int i = 0; i < btnMenu.size(); i++) {
                View v = View.inflate(mContext, R.layout.common_list_dialog_item, null);
                if (i == 0) {
                    v.findViewById(R.id.menu_line).setVisibility(View.GONE);
                }
                TextView tv = (TextView) v.findViewById(R.id.menu_button);
                tv.setText(btnMenu.get(i).getName());
                tv.setTextColor(btnMenu.get(i).color);
                tv.setPadding(20, 0, 20, 0);
                tv.setGravity(Gravity.CENTER);
                if (btnMenu.get(i).textsize != 0) {
                    tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, btnMenu.get(i).textsize);
                }
                tv.setOnClickListener(btnMenu.get(i).getClickListener());
                lyContents.addView(v);
            }
        }
    }

    //  类似于Javabean
    public static class CommonListMenuItem {
        private String name;
        private View.OnClickListener clickListener;
        private int color = Color.parseColor("#209E89");
        private int textsize = 0;

        public CommonListMenuItem(String name, View.OnClickListener clickListener, int color) {
            this.name = name;
            this.clickListener = clickListener;
            this.color = color;
        }

        public CommonListMenuItem(String name, View.OnClickListener clickListener, int color, int textsize) {
            this.name = name;
            this.clickListener = clickListener;
            this.color = color;
            this.textsize = textsize;
        }

        public CommonListMenuItem(String name, int color, int textsize) {
            this.name = name;
            this.color = color;
            this.textsize = textsize;
        }

        public CommonListMenuItem(String name, View.OnClickListener clickListener) {
            this.name = name;
            this.clickListener = clickListener;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public View.OnClickListener getClickListener() {
            return clickListener;
        }

        public void setClickListener(View.OnClickListener clickListener) {
            this.clickListener = clickListener;
        }
    }

    //构建
    public static class Builder {

        public Builder(Context context) {
            mContext = context;
            btnMenu = new ArrayList<CommonListMenuItem>();
        }

        public Builder addMenuItem(CommonListMenuItem item) {
            btnMenu.add(item);
            return this;
        }

        public ComListDialog show() {
            if (null != mContext && (!(mContext instanceof Activity) || !((Activity) mContext).isFinishing())) {
                ComListDialog dialog = new ComListDialog(mContext);
                dialog.show();
                return dialog;
            }
            return null;
        }
    }

    @Override
    public void dismiss() {
        super.dismiss();
        btnMenu = null;
        mContext = null;
    }
}
5F54B8A8-BB9A-4123-95F4-F6C3E9400AB7.png

demo下载地址

相关文章

  • 建造者设计模式-Builder design pattern

    建造者设计模式是创建型设计模式的一种。创建型设计模式处理对象创建的问题。 建造者设计模式,用来构建需要经过若干个建...

  • 设计模式[5]-构建者模式-Builder Pattern

    1. 构建者模式 构建者模式是创建型的设计模式,可以将复杂对象的创建过程和表示分离,使得同样的构建过程可以创建不同...

  • Kotlin(八)kotlin设计模式-创建型

    创建型模式 - 工厂 Kotlin里面几种主流创建型设计模式:工厂方法模式,抽象工厂模式,构建者模式 8.1 伴生...

  • 设计模式之创建型模式(Kotlin版)

    主要用途: 创建对象 Kotlin中几种最主流的创建型设计模式: 工厂方法模式、抽象工厂模式以及构建者模式。 伴生...

  • Builder模式

    一、作用 工匠若水-设计模式(创建型)之建造者模式(Builder Pattern) 用于构建复杂的对象,将构建的...

  • android常用设计模式之建造者设计模式

    定义:建造者设计模式属于创建型设计模式。将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。...

  • 46 - 建造者模式

    本文,我们来学习另外一个比较常用的创建型设计模式,Builder 模式,中文翻译为建造者模式或者构建者模式,也有人...

  • 设计模式-创建型-构建者模式

    基本概念: 构建者模式的定义将构建的过程和表示过程进行分离构建的过程:隐藏表示过程 : 开放 构建者模式的场景创建...

  • 创建型设计模式-构建者模式

    更新 Builder模式的使用场景 相同的方法,不同的执行顺序,产生不同的事件结果(示例的场景); 多个部件或零件...

  • JavaScript 23种设计模式

    创建型: 抽象工厂模式(Abstract Factory) 构建者模式(Builder) 工厂方法模式(Facto...

网友评论

    本文标题:设计模式-创建型-构建者模式

    本文链接:https://www.haomeiwen.com/subject/ckaofftx.html