创建复杂对象,试试建造者模式

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

内容简介:以前在用框架的时候发现创建一个对象要连着.出很多方法,最后居然返回了我要的对象,不明觉厉,居然是建造者模式。其实建造者没那么神奇,类似于建房子,将房子这个对象和建造的过程分离,然后我们在建造的过程中执行一步步的步骤,最后一步把建好的房子返回给我。工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性。使用场景:

以前在用框架的时候发现创建一个对象要连着.出很多方法,最后居然返回了我要的对象,不明觉厉,居然是建造者模式。其实建造者没那么神奇,类似于建房子,将房子这个对象和建造的过程分离,然后我们在建造的过程中执行一步步的步骤,最后一步把建好的房子返回给我。 建造者模式的定义:将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的 设计模式 被称为建造者模式。

工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性。

使用场景:

1、需要生成的对象具有复杂的内部结构。

2、需要生成的对象内部属性本身相互依赖。

与工厂模式的区别是:建造者模式更加关注与零件装配的顺序。

UML表示

1、Builder:为创建一个产品对象的各个部件指定抽象接口

2、ConcreteBuilder:实现Builder的接口,构造和装配该产品的各个组件,并提供创建该产品的一个接口

3、Director:构造一个使用Builder接口的对象。

4、Product:表示被构造的复杂对象

建造者模式UML类图

创建复杂对象,试试建造者模式

从上图可以看出Builder是为创建一个Product对象的各个部件指定的抽象接口,Product是具体的产品,Director是一个建造者,由他指挥使用Builder,ConcreteBuilder是具体的建造,实现Builder接口的各个方法。

建造者的静态内部类模式

下面以建房子为例使用静态内部类的方式建一个房子

public class House {

    /**
     * 房子的地基
     */
    private String basic;

    /**
     * 房子的墙
     */
    private String wall;

    /**
     * 房子的屋顶
     */
    private String roof;

    public House(HouseBuilder houseBuilder) {
        this.basic = houseBuilder.basic;
        this.wall = houseBuilder.wall;
        this.roof = houseBuilder.roof;
    }

    @Override
    public String toString() {
        return "House{" +
                "basic='" + basic + '\'' +
                ", wall='" + wall + '\'' +
                ", roof='" + roof + '\'' +
                '}';
    }

    public static class HouseBuilder {

        private String basic;

        private String wall;

        private String roof;

        /**
         * 打地基
         * @param basic
         * @return
         */
        public HouseBuilder buildBasic(String basic) {
            this.basic = basic;
            return this;
        }

        /**
         * 砌墙
         * @param wall
         * @return
         */
        public HouseBuilder buildWall(String wall) {
            this.wall = wall;
            return this;
        }

        /**
         * 建楼顶
         * @param roof
         * @return
         */
        public HouseBuilder buildRoof(String roof) {
            this.roof = roof;
            return this;
        }

        /**
         * 建造房子
         * @return
         */
        public House build() {
            return new House(this);
        }

    }
}

复制代码

本例中房子有地基,墙,屋顶三个属性,而建房子就是组装这三个部件,组成一个房子,也就是三个步骤:打地基,砌墙和建屋顶,然后在HouseBuilder中要提供一个对外的接口,将建好的House交出去,就是build()方法。

测试类

public static void main(String [] args) {
        House house = new House.HouseBuilder()
                .buildBasic("地基要稳固")
                .buildWall("墙要刷的很白")
                .buildRoof("楼顶要结实")
                .build();
        System.out.println(house.toString());
    }
复制代码

运行结果:

创建复杂对象,试试建造者模式

在测试类中我们按部就班的一步步建好了房子,最后通过build()方法拿到了我们想要的房子,这种静态内部类的方式代码简洁,写起来也很顺手。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

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

复杂网络理论及其应用

复杂网络理论及其应用

汪小帆、李翔、陈关荣 / 清华大学出版社 / 2006 / 45.00元

国内首部复杂网络专著 【图书目录】 第1章 引论 1.1 引言 1.2 复杂网络研究简史 1.3 基本概念 1.4 本书内容简介 参考文献 第2章 网络拓扑基本模型及其性质 2.1 引言 2.2 规则网络 2.3 随机图 2.4 小世界网络模型 2.5 无标度网络模型 ......一起来看看 《复杂网络理论及其应用》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具