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

构建者模式

    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设计模式-构建者模式-详解)