建造者模式

作者: Gray_s | 来源:发表于2017-08-21 21:42 被阅读0次

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

    定义

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

    示例

    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源码设计模式

    相关文章

      网友评论

        本文标题:建造者模式

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