Java设计模式: 建造者模式

1. 什么是建造者模式

建造者模式定义:

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

建造者模式包括的角色:

1Builder:给出一个抽象接口或抽象类,以规范产品的建造。
	这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建,一般由子类具体实现。

(2ConcreteBuilderBuilder接口的实现类,并返回组建好对象实例。

(3Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,
	只负责保证对象各部分完整创建或按某种顺序创建。

(4Product:要创建的复杂对象,产品类。

建造者模式的使用场景:

1)当产品有复杂的内部构造时(参数很多)。

(2)需要生产的产品的属性相互依赖,这些属性的赋值顺序比较重要时
		(因为在调用ConcreteBuilder的赋值方法时是有先后顺序的)。

2. 建造者角色分析:

建造者模式主要包含四个角色:
抽象建造者(Builder): 它声明为创建一个产品对象的各个部件指定的抽象接口,在该接口中一般声明两类方法,一类方法是buildPartX(),它们用于创建复杂对象的各个部件;另一类方法是getResult(),它们用于返回复杂对象。Builder既可以是抽象类,也可以是接口,
具体建造者(MyBuilder): 实现抽象建造者接口,构建和装配各个部件,定义并明确它所创建的复杂对象,也可以提供一个方法返回创建好的复杂产品对象。
指挥者(Director): 它负责安排复杂对象的建造次序,指挥者与抽象建造者之间存在关联关系,可以在其construct()建造方法中调用建造者对象的部件构造与装配方法,完成复杂对象的建造。客户端一般只需要与指挥者进行交互,在客户端确定具体建造者的类型,并实例化具体建造者对象(也可以通过配置文件和反射机制) ,然后通过指挥者类的构造函数或者Setter方法将该对象传入指挥者类中。它主要是用于创建一个复杂的对象,它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。
产品(Product): 产品角色,一个具体的产品对象。

3. 代码如下:

抽象建造者

/**
 * 抽象建造者
 */
public abstract class Builder {

    protected Product product = null;

    // 创建复杂对象的各个部件
    public abstract void buildPartA();

    public abstract void buildPartB();

    // 所谓的复杂对象  new    (创建对象默认调用无参构造函数)
    public Builder() {
        System.out.println("Product 即将创建");
        product = new Product();
    }

    // 返回复杂对象
    public Product getResult() {
        return product;
    }
}

具体建造者:

/**
 * 具体建造者, 实现抽象建造者接口
 */
public class MyBuilder extends Builder{

    // 构建和装配各个部件
    @Override
    public void buildPartA() {
        System.out.println("MyBuilder buildPartA");
    }

    @Override
    public void buildPartB() {
        System.out.println("MyBuilder buildPartB");
    }
}

产品:

/**
 * 产品
 */
public class Product {

    private String partA;
    private String partB;
}

指挥者:

/**
 * 指挥者(Director)  安排复杂对象的建造次序
 */
public class Director {
    private Builder builder;

    public Director(Builder builder) {
        this.builder = builder;
    }

    // 调用建造者对象的部件构造与装配方法
    public Product construct() {
        builder.buildPartA();
        builder.buildPartB();

        return builder.getResult();
    }
}

测试类:

/**
 * 测试类
 */
public class Test {
    public static void main(String[] args) {

        Builder builder = new MyBuilder();
        Director director = new Director(builder);
        Product product = director.construct();
        System.out.println(product);
    }
}

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值