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

Posted Z && Y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式 创建者模式 -- 建造者模式相关的知识,希望对你有一定的参考价值。

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;

/**
 * 具体的构建者,用来构建摩拜单车对象
 */
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;

/**
 * ofo单车构建者,用来构建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 模式适用环境



以上是关于设计模式 创建者模式 -- 建造者模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式从青铜到王者第八篇:创建型模式之建造者模式(BuilderPattern)

创建型模式之建造者模式

设计模式建造者模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

Java设计模式-建造者模式

设计模式:学习笔记——建造者模式

建造者模式