设计模式-建造者模式

来源:互联网 发布:爱伦坡黑猫 知乎 编辑:程序博客网 时间: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、关注点不同:
工厂模式注重只要把这个对象创建出来,而建造者模式不似要创造出这个产品,还有知道这个产品的组成部分

原创粉丝点击