设计模式实践笔记第三节:建造者模式

Posted 滕哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式实践笔记第三节:建造者模式相关的知识,希望对你有一定的参考价值。

建造者模式

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

大多数设计模式都不仅仅存在于IT世界,往往在现实生活中也有相当多的例子,建造者模式也不例外。 builder 的本意是建造者,通常用在建筑领域,小到瓦房单间,大到百米高楼,这些建筑都有一些固定的组成成分,比如墙、屋顶、门和窗等等。建造者们建造一栋房子,只要按照房子的成分,一步一步的添加材料即可。

一般来说我们在代码中使用建造者模式,也是因为有些类有固定的成分,我们不希望暴露过多的实例的创建过程,以此来降低系统维护的复杂程度。创建出来的实例也被称为 表示

使用建造者创建接口通用返回值

先来看一段接口的返回代码:

public class LoginController 

    // 登录
    public Result<String> login(String username, String password) 
        Result<String> result = new Result<>();
        if ("javanote".equalsIgnoreCase(username) && "123456".equalsIgnoreCase(password)) 
            result.setCode(0);
            result.setData("登录成功");
         else 
            result.setCode(1);
            result.setData("登录失败");
        
        return result;
    


public class Result<T> 
    private int code;
    private T data;

    // ...省略getter、setter

一般我们的接口都是固定格式的返回值,直接 new 一个返回实例出来也跑得通,但是我们有更好的方式来实现,那就是使用建造者模式来创建一个返回实例。

那么如何使用建造者模式来优化我们的代码呢?

按照建造者模式的概念,至少需要两个角色:表示和建造者。表示也就是我们需要创建的对象。

public class ResultBuilder<T> 
    private Result<T> result;

  	// 通过静态方法提供建造者实例
    public static <T> ResultBuilder<T> builder() 
        return new ResultBuilder<>();
    

  	// 私有构造器,保证建造者实例只能通过自身开放的方法提供出去
    private ResultBuilder() 
        this.result = new Result<>();
    

    public ResultBuilder code(int code) 
        this.result.setCode(code);
        return this;
    

    public ResultBuilder data(T data) 
        this.result.setData(data);
        return this;
    

    public Result<T> build() 
        return this.result;
    

首先我们提供了一个 ResultBuilder 来作为建造者,这里实现的方式有很多种,核心思想是将建造的整个过程委托给建造者角色,这里使用静态方法来简化操作。

如此,优化后的客户端代码如下:

public class LoginController 

    public Result<String> login(String username, String password) 
        if ("javanote".equalsIgnoreCase(username) && "123456".equalsIgnoreCase(password)) 
            return ResultBuilder.<String>builder()
                    .code(0)
                    .data("登录成功")
                    .build();
        
        return ResultBuilder.<String>builder()
                .code(1)
                .data("登录失败")
                .build();
    

小结

建造者模式是一个非常简单的设计模式,也非常的常用,尤其是在遇到非常之多参数的类要创建实例的时候,可以极大的简化人肉 new 的情况。创建型设计模式本来就是为创建对象服务的,这里如果搭配工厂模式食用,味道更佳。

在实际编程的时候,由于要新增建造者类,所以可能会造成系统整体更复杂,不过不用担心,在实践的过程中有比较多的辅助性开发工具可以帮助我们减轻压力,比如 Lombok 插件中提供的 @Builder 注解可以为一个类创建一建造者,具体的使用方法可以在实践中一探究竟!

实践出真知,让我们一起加油吧!

关注「Java实践笔记」公众号获取全部源代码!

版权声明:本文为公众号「Java实践笔记」的原创文章,转载请联系作者,附上原文出处链接及本声明。
原文链接:https://mp.weixin.qq.com/s/33YfZdDnIFJfDw5wDaa0bA

以上是关于设计模式实践笔记第三节:建造者模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式实践笔记第三节:建造者模式

建造者模式

设计模式—建造者模式

建造者模式

五建造者模式--创建型模式

Java设计模式之(建造者模式)