java设计模式之建造者模式

一.建造者模式描述

Builder模式是一步一步创建一个复杂对象的创建型模式,它允许使用者在不知道内部建造细节的情况下,可以更精细的控制对象的构造流程。该模式是为了将构建复杂对象的过程和它的部件解耦,使得构建过程和看不见得表示隔离开来。
因为一个复杂的对象有很多大量组成部分,如电脑,有主机,显示器,操作系统,还有各种小零件等,如何将这些看不见的组建成一台电脑,这个装配过程很漫长,也很复杂,为了在构建过程中对外部隐藏实现细节,就可以使用Builder模式将部件和组装过程分离,使得构建过程和部件都可以自由扩展,两者之间的耦合也降到最低。

二. 建造者模式定义

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

三.使用场景

(1)相同的方法,不同的执行顺序,产生不同的事件结果。
(2)对各部件或零件,都可以配到一个对象中,但是产生的运行结果又不相同时。
(3)产品类非常复杂,或者产品类中的调用顺序不同产生了不同的结果,这个时候使用创建者模式非常合适。
(4)当初始化一个对象特别复杂,如参数多,且很多参数都有默认值时。

四.简单实例
简单的汽车的构建

1.product类

public class CarProduct {
    private String wheet;
    private String color;
    private int num;
    private Boolean skyWindow;

    public String getWheet() {
        return wheet;
    }

    public void setWheet(String wheet) {
        this.wheet = wheet;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public Boolean getSkyWindow() {
        return skyWindow;
    }

    public void setSkyWindow(Boolean skyWindow) {
        this.skyWindow = skyWindow;
    }
}

2.builder接口

public interface CarBuilder<T> {
    /**
     * 车轮
     */
    public void buildeWheet(String wheet);

    /**
     * 车颜色
     */
    public void buildeColor(String color);

    /**
     * 容纳人数
     */
    public void buildeNum(int num);

    /**
     * 有无天窗
     */
    public void buildeSkyWindow(boolean skyWindow);

    /**
     * 返回一个对象实例
     */
    public T getInstance();
}

3.conCreatBuilder实现builder接口

public class CarConCreatBuilder implements CarBuilder<CarProduct> {
    private CarProduct carProduct = new CarProduct();

    @Override
    public void buildeWheet(String wheet) {
        carProduct.setWheet(wheet);
    }

    @Override
    public void buildeColor(String color) {
        carProduct.setColor(color);
    }

    @Override
    public void buildeNum(int num) {
        carProduct.setNum(num);
    }

    @Override
    public void buildeSkyWindow(boolean skyWindow) {
        carProduct.setSkyWindow(skyWindow);
    }

    @Override
    public CarProduct getInstance(){
        return carProduct;
    }
}

4.director进行车的装配环节(我这里写的默认值,实际代码中可以自行传入)

public class CarDirector {
    public CarProduct carDirector(CarConCreatBuilder carConCreatBuilder){

        carConCreatBuilder.buildeWheet("four");
        carConCreatBuilder.buildeColor("white");
        carConCreatBuilder.buildeNum(5);
        carConCreatBuilder.buildeSkyWindow(true);

        //返回实例
        return carConCreatBuilder.getInstance();
    }
}

5.测试代码

public class LastRun {
    public static void main(String[] args) {
        CarDirector carDirector = new CarDirector();
        CarProduct carProduct = carDirector.carDirector(new CarConCreatBuilder());

        System.out.println("------car infomation--------");
        System.out.println(carProduct.getColor());
        System.out.println(carProduct.getNum());
        System.out.println(carProduct.getSkyWindow());
        System.out.println(carProduct.getWheet());
    }
}

五.总结
建造者模式分为四个部分:
product:用于描述对象的属性
builder:用来提供装配对象属性的接口
conCreateBuilder:实现builder接口
director:调用构建对象的方法,并返回一个构建好的对象实例

参考博文:https://blog.csdn.net/zhuhuitao_struggle/article/details/80489572

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值