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

本文详细介绍了Builder模式的应用,通过创建摩拜单车和ofo单车实例,展示了如何使用抽象建造者类和具体建造者类来构造复杂对象。同时讨论了模式的优点如代码复用和灵活性,以及可能的缺点如系统结构复杂性。
摘要由CSDN通过智能技术生成

1. 建造者模式


1.1 引入

在这里插入图片描述
在这里插入图片描述


1.2 定义

在这里插入图片描述
在这里插入图片描述


1.3 结构

在这里插入图片描述

在这里插入图片描述


1.3.1 典型的复杂对象类代码

在这里插入图片描述


1.3.2 典型的抽象建造者类代码

在这里插入图片描述


1.3.3 典型的具体建造者类代码

在这里插入图片描述


1.3.4 典型的指挥者类代码

在这里插入图片描述


1.4 实例: 创建共享单车

创建共享单车:

在这里插入图片描述
在这里插入图片描述


1.4.1 Bike 自行车类:产品类

package com.tian.pattern.builder.demo1;

/**
 * 自行车类:产品类
 */
public class Bike {

    private String frame;//车架

    private String seat;//车座

    public String getFrame() {
        return frame;
    }

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

    public String getSeat() {
        return seat;
    }

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

1.4.2 Builder 建造者类:抽象建造者类

package com.tian.pattern.builder.demo1;

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

    //声明Bike类型的变量,并进行赋值
    protected Bike bike = new Bike();

    public abstract void buildFrame();

    public abstract void buildSeat();

    //构建自行车的方法
    public abstract Bike createBike();
}

1.4.3 MobileBuilder 摩拜单车建造者类:具体建造者类

package com.tian.pattern.builder.demo1;

/**
 * MobileBuilder 摩拜单车建造者类:具体建造者类
 */
public class MobileBuilder extends Builder {

    public void buildFrame() {
        bike.setFrame("碳纤维车架");
    }

    public void buildSeat() {
        bike.setSeat("真皮车座");
    }

    public Bike createBike() {
        return bike;
    }
}

1.4.4 OfoBuilder ofo单车建造者类:具体建造者类

package com.tian.pattern.builder.demo1;

/**
 * OfoBuilder ofo单车建造者类:具体建造者类
 */
public class OfoBuilder extends Builder {
    public void buildFrame() {
        bike.setFrame("铝合金车架");
    }

    public void buildSeat() {
        bike.setSeat("橡胶车座");
    }

    public Bike createBike() {
        return bike;
    }
}

1.4.5 Director 指挥者类

package com.tian.pattern.builder.demo1;

/**
 * 指挥者类
 */
public class Director {

    //声明builder类型的变量
    private Builder builder;

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

    //组装自行车的功能
    public Bike construct() {
        builder.buildFrame();
        builder.buildSeat();
        return builder.createBike();
    }
}

1.4.6 Client 客户端类(测试类)

package com.tian.pattern.builder.demo1;

/**
 * 客户端类(测试类)
 */
public class Client {
    public static void main(String[] args) {
        //创建指挥者对象
        Director director = new Director(new MobileBuilder());
        //让指挥者只会组装自行车
        Bike bike = director.construct();

        System.out.println(bike.getFrame());
        System.out.println(bike.getSeat());
    }
}

1.4.7 运行结果

在这里插入图片描述


1.5 可以简化系统结构,可以把指挥者类和抽象建造者进行结合

上面示例是 Builder模式的常规用法,指挥者类 Director在建造者模式中具有很重要的作用,它用于指导具体构建者如何构建产品,控制调用先后次序,并向调用者返回完整的产品类,但是有些情况下需要简化系统结构,可以把指挥者类和抽象建造者进行结合(把指挥者类的功能集成到抽象建造者类,然后删去指挥者类)
在这里插入图片描述

说明:

在这里插入图片描述


1.6 模式优缺点分析


1.6.1 优点

在这里插入图片描述


1.6.2 缺点

在这里插入图片描述


1.7 模式适用环境

在这里插入图片描述



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CodeJiao

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

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

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

打赏作者

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

抵扣说明:

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

余额充值