builder模式也叫建造者模式,builder模式的作用将一个复杂对象的构建与他的表示分离,使用者可以一步一步的构建一个比较复杂的对象。示例如下:

public static void main(String[] args) {MetaVo metaVo = new MetaVo();metaVo.setIcon("1").setTitle("2").setNoCache(true);System.out.println(metaVo);}

这种设计模式的精髓就主要有两点:其一,用户使用简单,并且可以在不需要知道内部构建细节的情况下,就可以构建出复杂的对象模型;其二,对于设计者来说,这是一个解耦的过程,这种设计模式可以将构建的过程和具体的表示分离开来。

Builder 模式创建步骤:

  • 在类中,创建一个静态内部类,包含外部类的全部属性;
  • 在内部类中,为每一个属性进行赋值;
  • 内部类中创建 build 方法,返回外部类对象
  • 在外部类中创建静态 builder方法,返回内部类对象

拿实体类举例就是创建一个实体类,然后呢,将你的set方法稍作改动,示例如下(已注释说明):

package com.pmtest.system.domain.vo;import com.pmtest.common.utils.StringUtils;/*** 路由显示信息** @author ppq*/
public class MetaVo
{/*** 设置该路由在侧边栏和面包屑中展示的名字*/private String title;/*** 设置该路由的图标,对应路径src/assets/icons/svg*/private String icon;/*** 设置为true,则不会被 <keep-alive>缓存*/private boolean noCache;/*** 内链地址(http(s)://开头)*/private String link;public MetaVo(){}public MetaVo(String title, String icon){this.title = title;this.icon = icon;}public MetaVo(String title, String icon, boolean noCache){this.title = title;this.icon = icon;this.noCache = noCache;}public MetaVo(String title, String icon, String link){this.title = title;this.icon = icon;this.link = link;}public MetaVo(String title, String icon, boolean noCache, String link){this.title = title;this.icon = icon;this.noCache = noCache;if (StringUtils.ishttp(link)){this.link = link;}}public boolean isNoCache(){return noCache;}
//默认生成类型是void,将其修改为你的实体类名称,注意不要使用你的属性的修饰类型   public MetaVo setNoCache(boolean noCache){this.noCache = noCache;
//然后在加上这个return this;结束return this;}public String getTitle(){return title;}
//默认生成类型是void,将其修改为你的实体类名称,注意不要使用你的属性的修饰类型   public MetaVo setTitle(String title){this.title = title;
//然后在加上这个return this;结束return this;}public String getIcon(){return icon;}
//默认生成类型是void,将其修改为你的实体类名称,注意不要使用你的属性的修饰类型 public MetaVo setIcon(String icon){this.icon = icon;
//然后在加上这个return this;结束return this;}public String getLink(){return link;}
//默认生成类型是void,将其修改为你的实体类名称,注意不要使用你的属性的修饰类型    public MetaVo setLink(String link){this.link = link;
//然后在加上这个return this;结束return this;}@Overridepublic String toString() {return "MetaVo{" +"title='" + title + '\'' +", icon='" + icon + '\'' +", noCache=" + noCache +", link='" + link + '\'' +'}';}
}

将set方法的返回类型修改为实体类,在其方法内加入return this;实体类编辑完成,

属性赋值的时候就可以进行链式编辑:

public static void main(String[] args) {MetaVo metaVo = new MetaVo();metaVo.setIcon("1").setTitle("2").setNoCache(true);System.out.println(metaVo);}

当然现在大多数的实体类都采用lombok的@Data注解,这样使代码更加简洁,示例如下:

@Data
//需要加上这个注解
@Accessors(chain = true)
public class Menu extends Model<Menu> {}

另外,常用的StringBuffer的append()方法,是不是觉的很相似,源码如下:

偶然阅读一篇文章,忽然想起了这个,记录下所得;

Java 设计模式 Builder 模式 链式编程相关推荐

  1. Java设计模式——Builder模式

    前言 之前写Android程序的时候,经常会用到Dialog(对话框)这个控件.我们在使用Dialog,比如AlertDialog的时候就用到了这里要说明的Builder模式.现在我们来看一下这样的一 ...

  2. Java设计模式-Builder模式

    Builder模式是将一个复杂对象的创建和表示分离,使同样的创建过程可以创建不同的表示.它属于建造类模式. 一般来说,如果一个对象的创建比较复杂,超出了构造方法所能包含的范围,就可以使用工厂模式和Bu ...

  3. java的观察模式链式,design-pattern-java

    在图16-3中,抽象类Approver充当抽象处理者(抽象传递者),Director.VicePresident.President和Congress充当具体处理者(具体传递者),PurchaseRe ...

  4. java链式编程_Java链式编程学习

    Java链式编程 在使用jquery时肯定对它的链式编程惊艳到,慢慢的其它语言这种编程模式也逐渐增多.其本身并不复杂,在调用方法时,方法最后返回对象本身,以达到链式编程的效果. 链式编程比较简单,只要 ...

  5. Java 设计模式 --- Template 模式 Java Template 模式 Java 模板设计模式

    Java 设计模式 --- Template 模式 Java Template 模式 Java 模板设计模式 一.概述 模板设计模式: 父类定义通用抽象的功能方法,子类负责具体的实现. 本文将以一个通 ...

  6. java链式编程_Java 链式编程 和 lombok 实现链式编程

    一.链式编程定义 链式编程的原理就是返回一个this对象,就是返回本身,达到链式效果. 二.jdk中 StringBuffer 源码 我们经常用的 StringBuffer 就是 实现了链式的写法. ...

  7. Java设计模式作业-责任链模式

    Java设计模式作业-责任链模式:Web过滤器 文章目录 前言 一.类图 二.代码及测试结果 1.Trouble类 2.Support类 3.CharSupport类 4.TypeTransformS ...

  8. JAVA设计模式之责任链模式(职责链模式)

    转自JAVA设计模式之责任链模式(职责链模式)​​​​​​​ 责任链/职责链(Chain of Responsibility)模式的定义 为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理 ...

  9. 链式编程在Java 中的应用

    链式编程在Java 中的应用 一.背景 近日在写一个问卷系统的时候,在处理接口返回值的时候,遇到了一些麻烦,总是感觉在处理返回对象的时候,书写的代码有一些冗余,每次都要获取对象,然后设置值,太麻烦了. ...

  10. Java学习第十二天----方法参数类型以及返回值类型问题、链式编程、package包、权限修饰符、内部类、成员内部类

    Java学习第十二天----方法参数类型以及返回值类型问题.链式编程.package包.权限修饰符.内部类.成员内部类 1.方法参数类型: (1)类名作为形式参数: public class MyTe ...

最新文章

  1. 巧用close_trace命令释放误删trace文件
  2. 约束理论学习随笔(2)---DBR系统
  3. HPU1460: 杨八方的表面兄弟
  4. java布局管理器的应用总结,GridBagLayout布局管理器的应用
  5. Android用Intent和Bundle传list
  6. python中的线程之semaphore信号量
  7. 计算机一级考试复习资料,全国计算机一级考试复习资料
  8. 数十名工程师作战 5 天,阿里达摩院连夜研发智能疫情机器人
  9. GIT插件EGIT使用手册
  10. Xshell7连接VMware15虚拟机上的Ubuntu详细步骤
  11. 【转】curl 查看一个web站点的响应时间(rt)
  12. [MySql]默认密码的查找与修改
  13. [译] A Neural Algorithm of Artistic Style--图片风格化
  14. python制作fnt字体打包工具
  15. 字体出现闪烁效果html,CSS3实现文字闪烁效果的多种形式代码
  16. android文件地址,Android文件夹在哪
  17. mysql创建/编辑表时的 ROW_FORMAT = Dynamic 和 Compact 有什么区别
  18. 人民币小写转大写金额(可达千百万亿)
  19. Android:浏览图片,点击放大至全屏效果
  20. (侯捷C++)1.1面向对象高级编程(上)

热门文章

  1. Filezilla server 使用教程
  2. 通信技术属于计算机相关专业吗,通信技术属于计算机类专业吗
  3. 从东南亚到中东,为什么社交类产品成为游戏出海的突破口?
  4. 基于飞桨实现BigGAN生成动漫图像——为艺术创作赋能
  5. 每个极客都应该知道的Linux技巧(区分开普通的Linux用户和超级极客)
  6. 360浏览器显示没网络连接服务器,360浏览器无法连接网络?怎么办?
  7. 导出PDF /home/education/font/simsun.ttc not found as file or resource.
  8. 直播app系统源码,简单的登录界面(登录、注册、记住密码等按键)
  9. java日期格式化 类_Java日期格式化(DateFormat类)
  10. MySQL可视化工具HeidiSQL安装与使用