11.2设计模式-构建者模式-详解
2018-11-18 本文已影响0人
205蚁
构建者模式
- java的builder模式详解
- 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