设计模式小抄(二) -- 建造者模式

栏目: 后端 · 发布时间: 5年前

内容简介:建造者模式(builder)是创建一个复杂对象的创建型模式,将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示分离开来。建造者模式角色:抽象建造者(Builder)角色:给出一个抽象接口,以规范产品对象的各个组成成分的建造。一般而言,此接口独立应用程序的商业逻辑。模式中直接创建产品对象的是具体建造者(ConcreteBuilder)角色。具体建造者类必须实现这个接口所要求的两种方法:一种是建造方法(buildPart1和buildPart2),另一种是返还结构方法(retrieveResult)。

建造者模式(builder)是创建一个复杂对象的创建型模式,将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示分离开来。

UML结构

设计模式小抄(二) -- 建造者模式

建造者模式角色:

抽象建造者(Builder)角色:给出一个抽象接口,以规范产品对象的各个组成成分的建造。一般而言,此接口独立应用程序的商业逻辑。模式中直接创建产品对象的是具体建造者(ConcreteBuilder)角色。具体建造者类必须实现这个接口所要求的两种方法:一种是建造方法(buildPart1和buildPart2),另一种是返还结构方法(retrieveResult)。一般来说,产品所包含的零件数目与建造方法的数目相符。换言之,有多少 零件,就有多少相应的建造方法。

具体建造者(ConcreteBuilder)角色:担任这个角色的是与应用程序紧密相关的一些类,它们在应用程序调用下创建产品的实例。这个角色要完成的任务包括:1.实现抽象建造者Builder所声明的接口,给出一步一步地完成创建产品实例的操作。2.在建造过程完成后,提供产品的实例。

导演者(Director)角色:担任这个角色的类调用具体建造者角色以创建产品对象。应当指出的是,导演者角色并没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者角色。

产品(Product)角色:产品便是建造中的复杂对象。一般来说,一个系统中会有多于一个的产品类,而且这些产品类并不一定有共同的接口,而完全可以是不相关联的。

实例代码

目录结构:

设计模式小抄(二) -- 建造者模式

Porsche

我们使用建造者模式, 创建一辆 保时捷(Porsche) 来溜达溜达,大体上一辆车主要有以下属性(简单列举了几个)

public class Porsche {
    //引擎
    private String engine;
    //气缸
    private String cylinder;
    //车架
    private String frame;

    // 省略 get/set method
}
复制代码

Builder

抽象Builder类, 列举我们在创建一辆车过程中,需要安装哪些部件

public abstract class Builder {
    public abstract void buildEngine(String engine);

    public abstract void buildCylinder(String cylinder);

    public abstract void buildFrame(String frame);

    public abstract Porsche create();
}

复制代码

PorscheBuilder

具体实现创建的方法,用于创建车辆

public class PorscheBuilder extends Builder {

    private Porsche porsche = new Porsche();


    public void buildEngine(String engine) {
        porsche.setEngine(engine);
    }

    public void buildCylinder(String cylinder) {
        porsche.setCylinder(cylinder);
    }

    public void buildFrame(String frame) {
        porsche.setFrame(frame);
    }

    public Porsche create() {
        return porsche;
    }
}
复制代码

Director

指挥官, 负责创建过程中的流程编排

public class Director {
    private Builder builder;

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

    public Porsche createPorsche(String engine, String cylinder, String frame) {
        builder.buildEngine(engine);
        builder.buildCylinder(cylinder);
        builder.buildFrame(frame);
        return builder.create();
    }
}
复制代码

客户端调用

class create {
    public static void main(String[] args) {
        Builder builder = new PorscheBuilder();
        Director director = new Director(builder);
        //组装车辆
        director.createPorsche("engine","cylinder","frame");
    }
}
复制代码

特性

使用场景

  • 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
  • 相同的方法,不同的执行顺序,产生不同的事件结果时。
  • 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时。
  • 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能。
  • 创建一些复杂的对象时,这些对象的内部组成构件间的建造顺序是稳定的,但是对象的内部组成构件面临着复杂的变化。

优缺点

  • 优点: 使用建造者模式可以使客户端不必知道产品内部组成的细节。 具体的建造者类之间是相互独立的,容易扩展。 由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
  • 缺点: 产生多余的Build对象以及Dirextor类。

参考:

哆啦A梦-传送门 哆啦A梦-传送门


以上所述就是小编给大家介绍的《设计模式小抄(二) -- 建造者模式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

HTTP/2基础教程

HTTP/2基础教程

Stephen Ludin、Javier Garza / 罗正龙、郑维智 / 人民邮电出版社 / 2018-1 / 49.00元

让网站和应用更快速、更简洁、更稳健,从而有效提升用户体验,这无疑是众多开发者梦寐以求的。然而互联网发展日新月异,HTTP/1.1协议已经难以满足现今的需求。在众多Web性能提升方案中,HTTP/2值得尝试。 本书是HTTP/2实用指南,介绍了HTTP/2的设计初衷和新特性,以及如何才能充分利用这些特性来打造高性能网站及应用。作者用定量分析方法,对比了不同网络环境下及不同浏览器上HTTP/1.......一起来看看 《HTTP/2基础教程》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

html转js在线工具
html转js在线工具

html转js在线工具