建造者模式

建造者模式可以允许用户在不知道内部细节的情况下,更为精细的控制对象的控制流程。该模式是为了将构建复杂的对象过程和它的部件进行解耦。

定义

将一个复杂对象的构建与它的表示分离,使得同样的构建过程的创建不同的表示。

示例

public class Computer {
    private String OS;
    private String display;
    private String board;

    public Computer(String OS, String display, String board) {
        this.OS = OS;
        this.display = display;
        this.board = board;
    }

    static class Builder {

        private String OS;
        private String display;
        private String board;

        public Builder setOS(String OS) {
            this.OS = OS;
            return this;
        }

        public Builder setDisplay(String display) {
            this.display = display;
            return this;
        }

        public Builder setBoard(String board) {
            this.board = board;
            return this;
        }

        public Computer create() {
            return new Computer(OS, display, board);
        }
    }
}

上面的示例中由Computer中的静态内部类Builder来构建对象,使用者不需要考虑Computer是怎么样具体实现的,只需要在Builder中把需要的参数传入进去,便可以通过create方法拉实现Computer对象。

Android源码中的建造者模式

Android的源码中同样使用了建造者模式,在AlertDialog中便是使用AlertDialog.Builder来构建AlertDialog对象的。

new AlertDialog.Builder(this).setTitle("建造者模式")
               .setCancelable(true)
               .setMessage("使用建造者模式的对话框")
               .create();

查看源码可以发现,Biulder中并不是直接通过new一个AlertDialog对象来构建对象的。而是通过AlertController.AlertParams把在create之前设置的参数先存放在AlertController.AlertParams中,然后在create中new出AlertDialog对象,通过apply方法传入dialog来对它进行设置。

create方法

参考资料:Android源码设计模式

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容