美文网首页
11.2设计模式-构建者模式-详解

11.2设计模式-构建者模式-详解

作者: 205蚁 | 来源:发表于2018-11-18 17:17 被阅读0次

    构建者模式

      1. java的builder模式详解
      1. builder模式在android中的实际运用

    1.java的builder模式详解

    1.概念
        建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或不见)的复杂对象的创建过程分离
        :要创建的对象整体结构里有很多子对象,想把目标对象的创建和子对象的创建所分离,客户端不要知道复杂对象的内部组成部分与数据类型结构。
        建造者将关注点 集中到一步步创建复杂对象上,而不是将复杂对象拆开来每一步都去创建。
        这时不同的具体构建者,定义不同的创建过程。
        Okhttp,glid
        将一个复杂对象的构建与表示分离。怎么理解“表示”?
    2.使用场景
        当构造一个对象需要很多参数的时候,并且参数的个数和类型不固定的时候。
        glid可以设置内存、sdk缓存
        
        
    3.UML结构图分析
        图:
        类:Product(目标对象),Builder(抽象或者接口),ConcreteBuilder(具体的构建者实现) Director(方向、导演,组织构建循序等)
        Builder类:一般会申明BuildPartX方法。 getResult()返回已创建的复杂对象
        ConcreteBuilder类:实现了我们的Builder接口,实现了部件的具体创建方法,同时定义了创建复杂对象的作用,提供一个getResult方法
        Product类:内部不是单一变量,而是包含各种部件(x,y,z,重量,体积)
        Director 指挥者:负责整个结构,负责安排复杂对象的建造次序,安排好那些变量先初始化,以及变量直接有哪些关系
        
        客户端只需要使用Director完成交互
        图;
        public abstract class Builder{
            //创建产品对象
            protected Product product = new Product();
            public abstract void buildPartA();
            public abstract void buildPartB();
            public abstract void buildPartC();
            
            //返回产品对象
            public Product getResult(){
                return product;
            }
        }
        public class ConcreteBuilder extends Builder{
            public void buildPartA、B、C(){//去设置产品,不同的产品 }
        }
        
        class Product{
            private String partA、B、C;//定义部件,部件可以使任务类型,包括值类型和引用类型
            public String getPartA、B、C(){return xx};//这个部分用户不需要关心内部有多少复杂的类型。只需要做好Builder实现类的builderPartA的工作,
            public void setPartA、B、C(xx);
        }
        复杂对象就是包含多个属性的对象
        
        class Director{
            private Director(Builder builder){
                this.builder = builder;
            }
            
            public void setBuilder(Builder builder){
                this.builder = builder;
            }
            
            //产品构建与组装方法
            public Product construct(){
                builder.buildPartA();
                builder.buildPartB();
                builder.buildPartC();
                return builder.getResult();
            }
            作用:1.隔离我们程序员创建复杂对象的过程
                    2.控制产品(Product)这个复杂对象的创建过程,是否需要执行某个方法,顺序怎样
            
        }
        
        使用:Builder builder = new ConcreteBuilder();//可通过配置文件实现
                Director director = new Director(builder);
                Product product = director.construct();
        
        总结:
            1.Builder:它为创建一个产品Product对象的各个部件指定抽象接口
            2.ConcreteBuilder:它实现了Builder接口,实现了各个部件的具体制造和装配方法
            3.Product:它是被构建的复杂对象,包含多个组成部件
            4.Director:指挥者又称导演类,它负责安排复杂对象的建造次序,指挥者和抽象建造者之间存在关联关系
    4.实际代码分析
    5.builder模式的优点
        松散耦合:生成器模式可以用同一个构建算法构建出表现上完全不同的产品,实现产品构建和产品表现上的分离
        
        2.可以很容易的改变产品的内部表示
        3.更好的复用性:生成器模式很好的实现构建算法和具体产品实现的分离
        
        
    6.builder模式的缺点
        1.会产生多余的Builder对象以及Director对象,消耗内存
        2.对象的构建过程暴露
    

    2.builder模式在android中的实际运用

    1.AlertDialog
    2.Glide、OkHttp
    
    1.AlertDialog
        图:
        AlertDialog :1.构造方法 2.onCreate方法 。属性:alert
            内部类:static class Builder{
                        AlertController.AlertParams P; 
                        方法:AlertDialog create(); 将AlertController与我们的AlertController.AlertParams建立联系。就是将控制成controller和逻辑层 params相联系
        AlertController:installContent(){
                            1.setContentView
                            2.setupView
                                整个视图构建的全过程
            内部类AlertController.AlertParams{
                方法:void apply(AlertController dialog){
                    dialog.setTitle(mTitle);等等
    2.Glide、OkHttp
    
    11_1-11-7[00_28_03][20180731-203257-0].jpg 11_1-11-7[00_32_04][20180731-204203-1].jpg 11_1-11-7[00_33_05][20180731-204546-3].jpg 11_1-11-7[00_33_12][20180731-204539-2].jpg 11_1-11-7[00_35_12][20180731-205115-4].jpg 11_1-11-7[00_41_09][20180731-210541-5].jpg 11_1-11-7[00_42_11][20180731-210627-6].jpg 11_1-11-7[00_42_28][20180731-210640-7].jpg 11_1-11-7[00_42_55][20180731-210811-8].jpg 11_1-11-7[00_43_52][20180731-211046-9].jpg 11_1-11-7[00_44_10][20180731-211100-0].jpg 11_1-11-7[00_46_33][20180731-211438-1].jpg

    相关文章

      网友评论

          本文标题:11.2设计模式-构建者模式-详解

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