建造者模式

定义

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

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

结构图

这里写图片描述

Director:指挥者,是构建一个使用Builder接口的对象。调用创建者来创建复杂对象的各个部分,在指导者不涉及具体产品的信息,只负责保证对象各部分完整创建或者按照某种顺序创建。

Builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪一部分的创建,并不涉及具体的对象部件的创建。

ConcreteBuilder:实现Builder接口,针对不同的业务逻辑,具体化复杂对象的各个部分的创建。

Product:要创建的复杂对象。

我们可以看出建造者模式的适用条件(都满足):
1.建造过程复杂的对象
2.注重零件的装配顺序或者完整性,或者之后会更改顺序的需求。
3.产品的组件一般变更不太大,如果太大的话,Product和Builder等一列类都需要更改。

自己的理解:

建造者更强调的是,同一个流程下,实现的不同会产生不同的结果。将流程抽取出来成一个类,避免每次都重复写这套流程。将流程和实现分离开。

实例

这里以游戏开发中人物的构造过程为例。在游戏中创建一个形象时,需要对每个部位进行创建。简化而言,需要创建头部,身体和四肢。

类图
这里写图片描述

PerDirector类:

public class PersonDirector {
    public Person constructPerson(Builder builder){
        builder.buildHead();
        builder.buildBody();
        builder.buildFoot();
        return builder.buildPerson();
    }
}

Builder类:

public abstract class Builder {
    protected Person person;

    public abstract void buildHead();

    public abstract void buildBody();

    public abstract void buildFoot();

    public abstract Person buildPerson();
}

ConcreteBuilder类:

public class ConcreteBuilder extends Builder{

    public ConcreteBuilder(){
        person = new Person();
    }

    @Override
    public void buildHead() {
        person.setBody("小头");
    }

    @Override
    public void buildBody() {
        person.setBody("小身");
    }

    @Override
    public void buildFoot() {
        person.setFoot("小脚");
    }

    @Override
    public Person buildPerson() {
        System.out.println("创建成功");
        return person;
    }

}

实体类Person:

public class Person {
    private String head;
    private String body;
    private String foot;
    public String getHead() {
        return head;
    }
    public void setHead(String head) {
        this.head = head;
    }
    public String getBody() {
        return body;
    }
    public void setBody(String body) {
        this.body = body;
    }
    public String getFoot() {
        return foot;
    }
    public void setFoot(String foot) {
        this.foot = foot;
    }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值