设计模式 - 创建型模式 - 建造者模式

本文参考于     ----->    建造者模式(Bulider模式)详解icon-default.png?t=M666http://c.biancheng.net/view/1354.html

建造者模式的定义与特点

建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。

该模式的主要优点如下:

  • 封装性好,构建和表示分离。
  • 扩展性好,各个具体的建造者相互独立,有利于系统的解耦。
  • 客户端不必知道产品内部组成的细节,建造者可以对创建过程逐步细化,而不对其它模块产生任何影响,便于控制细节风险。


其缺点如下:

  • 产品的组成部分必须相同,这限制了其使用范围。
  • 如果产品的内部变化复杂,如果产品内部发生变化,则建造者也要同步修改,后期维护成本较大。

模式的结构与实现

建造者(Builder)模式由产品抽象建造者具体建造者指挥者等 4 个要素构成 ,现在用一个生产自行车的案例来分析这四个要素。

具体的产品 :自行车 

构建一个自行车类

package builder;

/**
 * 实际需要构建的复杂对象
 */
public class Bike {
    String seat;
    String frame;

    public String getSeat() {
        return seat;
    }

    public void setSeat(String seat) {
        this.seat = seat;
    }

    public String getFrame() {
        return frame;
    }

    public void setFrame(String frame) {
        this.frame = frame;
    }

    @Override
    public String toString() {
        return "Bike{" +
                "seat='" + seat + '\'' +
                ", frame='" + frame + '\'' +
                '}';
    }
}

抽象建造者 :有所有具体建造者要实现的方法

表示所有具体建造者必须要实现 createFrame( ) createSeat( )  createBike( ) , 代表意思 创建车架、创建车座 、创建自行车 

package builder;

/**
 * 抽象建造类
 */
public abstract class Builder {
    protected Bike bike = new Bike();

    public abstract void createFrame();

    public abstract void createSeat();

    public abstract Bike createBike();
}

具体建造类 :具体要建造的内容

具体建造内容是MobaiBike

package builder;

/**
 * 具体建造类
 */
public class MobaiBikeBuilder extends Builder{

    @Override
    public void createFrame() {
        bike.setFrame("MobaiFrame");
    }

    @Override
    public void createSeat() {
        bike.setSeat("MobaiSeat");
    }

    @Override
    public Bike createBike() {
        return bike;
    }

}

指挥者 : 指挥具体建造者建造产品

package builder;

/**
 * 指挥者类
 */
public class Director {
    Builder builder;

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

    public Bike construct() {
        builder.createFrame();
        builder.createSeat();
        return builder.createBike();
    }
}

测试

package builder;

public class test {
    public static void main(String[] args) {
        Director director = new Director(new MobaiBikeBuilder());
        System.out.println(director.construct());
    }
}

 

最后生产的具体产品

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NoBug.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值