设计模式-建造者模式
来源:互联网 发布:爱伦坡黑猫 知乎 编辑:程序博客网 时间:2024/06/06 19:11
定义
官方定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,通俗的说就是:建造者模式就是如何一步步构建一个包含多个组成部件的对象,相同的构建过程可以创建不同的产品
特点
建造者模式是一种创建型模式,适用于那些流程固定,建造的目标对象会有所改变这种场景,还有一种场景是代替多参数构造器
作用
1、用户不知道对象的建造过程和细节就可以创建出复杂的对象「屏蔽了建造的具体细节」
2、用户只需给出复杂对象的内容和类型可以创建出对象
结构
Builder 接口或抽象类 抽象的建造者, 不是必须的
ConcreateBuilder 具体的构建者 可以有多个
Product 普通的类 被构建的对象
Director 指挥者 统一指挥构造者去建造目标
组装Android 手机为例
1、要建造的对象 AndroidPhone
public class AndroidPhone {
private int emmcSize;private String cup;public void setCup(String cup) { this.cup = cup;}public void setEmmcSize(int emmcSize) { this.emmcSize = emmcSize;}
}
2、抽象的建造者 Builder
public interface Builder {
void setCup(String cup);
void setEmmcSize(int size);
AndroidPhone createPhone() ;
}
3、具体建造者 AssemblerBuilder
public class AssembleBuilder implements Builder{
private AndroidPhone androidPhone = new AndroidPhone();@Overridepublic void setCup(String cup) { androidPhone.setCup(cup);}@Overridepublic void setEmmcSize(int size) { androidPhone.setEmmcSize(size);}@Overridepublic AndroidPhone createPhone() { return androidPhone;}
}
4、指挥者 Director
public class Director {
private Builder mBuilder;public Director(Builder builder) { mBuilder = builder;}public AndroidPhone createPhone(String cup, int size) { mBuilder.setCup(cup); mBuilder.setEmmcSize(size); return mBuilder.createPhone();}
}
5、测试类
public static void main(String[] args) {
Builder builder = new AssembleBuilder();
AndroidPhone androidPhone = new Director(builder).createPhone("mst618", 2048);
}
使用场景
1、如果一个对象有非常复杂的内部结构「这些产品通常有很多属性」,那么使用建造者模式
2、如果想把复杂对象的创建和使用分离开来,那么使用建造者模式「使用相同的创建步骤可以创建不同的产品」
建造者模式与简单工厂模式的差异
1、创建对象的粒度不同
工厂模式创建的是对象,而建造者模式创建的是一个复合产品,由各个复杂的部件组成。
2、关注点不同:
工厂模式注重只要把这个对象创建出来,而建造者模式不似要创造出这个产品,还有知道这个产品的组成部分
- 设计模式-------建造者
- 设计模式-建造者
- 建造者设计模式
- 建造者设计模式
- 建造者设计模式
- 设计模式-建造者
- 建造者设计模式
- 建造者设计模式
- 建造者设计模式
- [设计]建造者模式
- 设计模式:建造者模式
- 设计模式---建造者模式
- 设计模式---建造者模式
- 设计模式-----建造者模式
- 设计模式-【建造者模式】
- 设计模式--建造者模式
- 设计模式建造者模式
- 设计模式- 建造者模式
- pca程序
- WEB前端的优化规则
- MVP+Retrofit+RxJava请求网络数据实现RecyclerView多条目展示
- 建议
- adb工具包使用介绍 adb工具包安装使用方法
- 设计模式-建造者模式
- SQL查询的时候能查询到结果,但是将SQL语句改为存储过程的时候就提示表不存在
- Android Source Code Menu
- 机器翻译
- eclipse 代码提示:configure build path
- HDU 2553.N皇后问题
- 互联网B端产品设计经验总结
- 对抗生成网络(Generative Adversarial Network)
- 拦截器