专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

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

前言

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

工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性。
使用场景:
1、需要生成的对象具有复杂的内部结构。
2、需要生成的对象内部属性本身相互依赖。
与工厂模式的区别是:建造者模式更加关注与零件装配的顺序。

UML表示

1、Builder:为创建一个产品对象的各个部件指定抽象接口
2、ConcreteBuilder:实现Builder的接口,构造和装配该产品的各个组件,并提供创建该产品的一个接口
3、Director:构造一个使用Builder接口的对象。
4、Product:表示被构造的复杂对象

建造者模式UML类图

65_1.png

从上图可以看出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());
    }

运行结果:

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

文章永久链接:https://tech.souyunku.com/45824

未经允许不得转载:搜云库技术团队 » 创建复杂对象,试试建造者模式

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们