美文网首页设计模式
生成器模式(分离部件构造)

生成器模式(分离部件构造)

作者: 幺鹿 | 来源:发表于2017-02-24 11:52 被阅读15次

前言

生成器模式的主要功能是构建复杂的产品,而且是细化的,分步骤的构建产品,也就是生成器模式重在解决一步一步构造复杂对象的问题。如果光是这么认识生成器模式的功能是不够的。

更为重要的是,这个构建的过程是统一的,固定不变的,变化的部分放到生成器部分了,只要配置不同的生成器,那么同样的构建过程,就能构建出不同的产品表示来

再直白点说,生成器模式的重心在于分离构建算法具体的构造实现,从而使得构建算法可以重用,具体的构造实现可以很方便的扩展和切换,从而可以灵活的组合来构造出不同的产品对象。

构建生成器模式

一个部分是Builder接口这边,这边是定义了如何构建各个部件,也就是知道每个部件功能如何实现,以及如何装配这些部件到产品中去。

另外一个部分是Director这边,Director是知道如何组合来构建产品,也就是说Director负责整体的构建算法,而且通常是分步骤的来执行。

public class Person {

    private String color;
    private String height;
    private String weight;
    private String gender;

    private Person() {
    }

    @Override
    public String toString() {
        return "Person{" +
                "gender='" + gender + '\'' +
                ", weight='" + weight + '\'' +
                ", height='" + height + '\'' +
                ", color='" + color + '\'' +
                '}';
    }

    public static class Builder {

        private String color;
        private String height;
        private String weight;
        private String gender;

        public Builder buildColor(String color) {
            this.color = color;
            return this;
        }

        public Builder buildWeight(String weight) {
            this.weight = weight;
            return this;
        }

        public Builder buildHeight(String height) {
            this.height = height;
            return this;
        }

        public Builder buildGender(String gender) {
            this.gender = gender;
            return this;
        }

        public Person build() {
            Person person = new Person();
            person.color = color;
            person.gender = gender;
            person.height = height;
            person.weight = weight;
            return person;
        }
    }
}

模式应用

// Android AlertDialog

public static class Builder {
        private final AlertController.AlertParams P;

        public Builder(Context context) {
            this(context, resolveDialogTheme(context, 0));
        }

        public Builder(Context context, int themeResId) {
            P = new AlertController.AlertParams(new ContextThemeWrapper(
                    context, resolveDialogTheme(context, themeResId)));
        }

        public Builder setCustomTitle(View customTitleView) {
            P.mCustomTitleView = customTitleView;
            return this;
        }

        // 省略其他build方法

        public AlertDialog create() {
            // Context has already been wrapped with the appropriate theme.
            final AlertDialog dialog = new AlertDialog(P.mContext, 0, false);
            P.apply(dialog.mAlert);
            dialog.setCancelable(P.mCancelable);
            if (P.mCancelable) {
                dialog.setCanceledOnTouchOutside(true);
            }
            dialog.setOnCancelListener(P.mOnCancelListener);
            dialog.setOnDismissListener(P.mOnDismissListener);
            if (P.mOnKeyListener != null) {
                dialog.setOnKeyListener(P.mOnKeyListener);
            }
            return dialog;
        }

        public AlertDialog show() {
            final AlertDialog dialog = create();
            dialog.show();
            return dialog;
        }
}

AlertController.AlertParamsAlertController所需要的参数。

AlertController.AlertParams.png

AlertController.AlertParams通过调用apply()方法,完成控制器到视图的调用。

AlertController.AlertParams#apply()

apply()的方法的间接调用方是Builder对象中的create()方法。同时create()show()方法也充当着Dirtector角色

导演角色的方法们.png

总结

本例中生成器模式将生成对话框的诸多不确定性职责拆解,向外暴露这些职责并允许可以按照自己的需求填入职责。

生成器模式提供统一的生成过程:
new Builder().build(xxx).create().show();
因而不同的部件传入就会引起不同的视图表现。

设计模式的表达形式有很多种,但是思想都是一致的。

相关文章

  • 生成器模式(分离部件构造)

    前言 生成器模式的主要功能是构建复杂的产品,而且是细化的,分步骤的构建产品,也就是生成器模式重在解决一步一步构造复...

  • Android实用设计模式之建造者模式

    什么是建造者模式? 建造者模式允许用户在创建复杂对象时,分离开其部件与构造的细节,更加精细地控制对象的构造过程,使...

  • 生成器模式(Builder Pattern)

    生成器模式:用生成器模式封装一个产品的构造过程,并允许按步骤构造 生成器模式又称为建造者模式,是创建性模式中的一种...

  • 建造者模式

    建造者模式(Builder)也被称为生成器模式,将一个复杂对象的构造与它的表示分离,使得同样的构建过程可以创建不同...

  • php设计模式之建造者模式

    建造者模式 建造者模式也成生成器模式,是将一个复杂对象的构造与他的表示分离,使同样的构建过程可以创建不同的表示创建...

  • 建造者模式(部件构造)

    目录 建造者模式的理念 从 POJO 到建造者模式的思考 怎么来实现建造者模式 建造者模式在Android源码中的...

  • Java设计模式 - 构造器模式

    一、构造器模式 构造器模式,也被称为建造者、生成器模式,是设计模式中比较容易理解的模式之一。 定义:将一个复杂对象...

  • 创建型模式4-生成器模式

    创建型模式4-生成器模式 生成器模式(builder) 意图 将一个复杂对象的构建与它的的表示分离,使得同样的构建...

  • iOS设计模式-生成器模式

    何为生成器模式? 生成器模式:将一个复杂对象的构建与它的表现分离,使得同样的构建过程可以创建不同的表现。 生成器模...

  • 生成器模式builder

    生成器模式即建造者模式builder,是创建型的设计模式,主要的目的是封装一个对象的构造过程,并运行按步骤构造,我...

网友评论

  • 幺鹿:想找群小伙伴互相勘误彼此的文章,站在不同的角度提点建议、批判,有意向的朋友可以私信我:smile:

本文标题:生成器模式(分离部件构造)

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