博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式学习--Builder
阅读量:4965 次
发布时间:2019-06-12

本文共 2378 字,大约阅读时间需要 7 分钟。

What

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

Why

Builder也是创建型模式的一种,它是一步一步的向导式的创建一个复杂的对象,Builder接口定义创建复杂对象的零部件,Director根据客户端端传入的builder按照一定的步骤创建完成复杂对象的创建。

Builder适用于比较复杂的对象的创建,该对象的创建有比较稳定的步骤或者比较稳定的“零件”,但是“零件”(步骤)内部的构建是复杂多变的。
设计模式书中Builder适用于如下情况:
1、当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2、当构造过程必须允许被构造的对象有不同的表示时。

How

假设如下场景,需要构造一个汽车类,汽车有轮子,方向盘,发动机,不同品牌的汽车零件算法不同。以此为示例,使用builder模式实现。

汽车builder接口

public abstract class CarBuilder {    protected Car car=null;    public abstract void buildWheel();    public abstract void buildEngine();    public abstract void buildSteeringWheel();    public Car getResult(){        return car;    }}

Jeep汽车builder实现

public class JeepCarBuilder extends CarBuilder {    @Override    public void buildWheel() {        System.out.println("construct jeep car wheel");    }    @Override    public void buildEngine() {        System.out.println("construct jeep car engine");    }    @Override    public void buildSteeringWheel() {        System.out.println("construct jeep car steering wheel");    }}

Chery汽车builder实现

public class CheryCarBuilder extends CarBuilder {    @Override    public void buildWheel() {        System.out.println("construct chery car wheel");    }    @Override    public void buildEngine() {        System.out.println("construct chery car engine");    }    @Override    public void buildSteeringWheel() {        System.out.println("construct chery steering wheel");    }}

Director实现

public class CarDirector {    private CarBuilder builder;    public CarDirector(CarBuilder builder){        this.builder=builder;    }    public Car construct(){        builder.buildSteeringWheel();        builder.buildEngine();        builder.buildWheel();        return builder.getResult();    }}

Client调用

public class App {    public static void main( String[] args ){        CarBuilder builder=new JeepCarBuilder();        CarDirector director=new CarDirector(builder);        director.construct();        CarBuilder builder1=new CheryCarBuilder();        CarDirector director1=new CarDirector(builder1);        director1.construct();    }}

本示例类图如下:

Discuss

Builder模式的好处是使建造代码与表示代码分离,如果需要增加系列产品,只需要增加相应的builder接口实现即可,如果需要改变产品的表示,也只需修改builder接口的实现即可。

在jdk中,StringBuilder是一个简易版的builder模式,其中StringBuilder充当了builder以及construct的角色,Client充当了Director。
类图如下(来自happyhippy's Blog):

Reference

1、

转载于:https://www.cnblogs.com/JerryWang1991/p/3936381.html

你可能感兴趣的文章
杭州蓝松科技---短视频SDK介绍
查看>>
javascript你应该知道的七件事
查看>>
垃圾短信识别
查看>>
SOAP 1.1与SOAP 1.2的区别
查看>>
【AC自动机】Lougu P3796
查看>>
Java文件流的常见错误
查看>>
重载操作符
查看>>
用 SDL2 处理精灵图
查看>>
MySQL基础语法
查看>>
TextView淡入淡出效果
查看>>
30岁当下的困惑
查看>>
美国将会垄断互联网:为什么需要政府网关——一个技术人员的角度
查看>>
IdentityServer4【Topic】之定义客户端
查看>>
第14月第17天 automaticallyAdjustsScrollViewInsets contentInsetAdjustmentBehavior
查看>>
LintCode Coins in a Line III
查看>>
Hive 行列转换
查看>>
(转)Asp.Net生命周期系列五
查看>>
织梦栏目页分页title加"第N页"
查看>>
记录一次数据库链接不够用被drop掉的问题
查看>>
C语言实现通用链表初步(二)
查看>>