建造者模式

建造者模式

当我们需要将一个复杂的对象的构建与他的表示分离,使用相同的构造过程来创建不同的表示的时候,我们就需要使用建造者模式了。


结构图

这里写图片描述

例子:大话设计模式中的,例子。大鸟让小菜创建一个小人,拥有头,身体,左右手,左右腿。因为人都拥有头,身体,左右手和左右腿。这样,当需要构建出不同的人,例如一个瘦子,一个胖子,一个瘸腿的,他们的过程都是一样的,但是表达方式都不一样。
于是我们就可以将构建人的过程抽象成一个builder接口,对于需要创建不同的的人,只需要不同的builder来继承这个类。这样就可以保证说有的步骤,不会因为编码者的原因有任何的缺漏。
而且如果我们使用了建造者模式,那么用户就只需要指定建造的类型就可以得到他们,而建造的过程和细节就不需要知道了。


建造者模式的步骤

1、首先需要将构造过程抽象出来形成一个接口,将构建头,手,身体等写成抽象方发。
2、在builder接口中创建一个builder的类,来产生创建的product也就是“人”。
3、创建一个建造者,来传入具体的需要建造的产品,来进行建造。


一个简单的例子

首先创建一个PsersonBuilder

/**
 * 抽象出需要建造的过程,需要建造手,头,脚,身体
 * Created by zero on 2017/3/31.
 */
public interface PersonBuilder {
    public void buildHead();

    public void buildBody();

    public void buildLleg();

    public void buildRleg();

    public void buildLhand();

    public void buildRhand();
}

创建一个Builder,实现这个接口,来建造瘦人
同时我们可以创建不同的人,缺胳膊少腿的都可以。建造过程不变

public class PersonThinBuilder implements PersonBuilder {
    @Override
    public void buildHead() {
        System.out.println("有头");
    }

    @Override
    public void buildBody() {
        System.out.println("身体小");
    }

    @Override
    public void buildLleg() {
        System.out.println("有左腿");
    }

    @Override
    public void buildRleg() {
        System.out.println("有右腿");
    }

    @Override
    public void buildLhand() {
        System.out.println("有左手");
    }

    @Override
    public void buildRhand() {
        System.out.println("有左手");
    }
}

创建一个具体建造者来建造人

public class PersonDirector {
    private PersonBuilder personBuilder;

    public PersonDirector(PersonBuilder personBuilder) {
        this.personBuilder = personBuilder;
    }

    /**
     * 创建一个人,根据用户的选择
     * @return
     */
    public PersonBuilder creatPerson(){
        personBuilder.buildBody();
        personBuilder.buildHead();
        personBuilder.buildLhand();
        personBuilder.buildRhand();
        personBuilder.buildLleg();
        personBuilder.buildRleg();
        return personBuilder;
    }
}

客户端调用

public class App {
    public static void main(String[] args) {
        //需要创建一个瘦的人
        PersonThinBuilder personThinBuilder = new PersonThinBuilder();
        //创建建造者
        PersonDirector personDirector = new PersonDirector(personThinBuilder);

        //建造小人
        personDirector.creatPerson();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值