Java 设计模式 Builder 模式 链式编程
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 模式 链式编程相关推荐
- Java设计模式——Builder模式
前言 之前写Android程序的时候,经常会用到Dialog(对话框)这个控件.我们在使用Dialog,比如AlertDialog的时候就用到了这里要说明的Builder模式.现在我们来看一下这样的一 ...
- Java设计模式-Builder模式
Builder模式是将一个复杂对象的创建和表示分离,使同样的创建过程可以创建不同的表示.它属于建造类模式. 一般来说,如果一个对象的创建比较复杂,超出了构造方法所能包含的范围,就可以使用工厂模式和Bu ...
- java的观察模式链式,design-pattern-java
在图16-3中,抽象类Approver充当抽象处理者(抽象传递者),Director.VicePresident.President和Congress充当具体处理者(具体传递者),PurchaseRe ...
- java链式编程_Java链式编程学习
Java链式编程 在使用jquery时肯定对它的链式编程惊艳到,慢慢的其它语言这种编程模式也逐渐增多.其本身并不复杂,在调用方法时,方法最后返回对象本身,以达到链式编程的效果. 链式编程比较简单,只要 ...
- Java 设计模式 --- Template 模式 Java Template 模式 Java 模板设计模式
Java 设计模式 --- Template 模式 Java Template 模式 Java 模板设计模式 一.概述 模板设计模式: 父类定义通用抽象的功能方法,子类负责具体的实现. 本文将以一个通 ...
- java链式编程_Java 链式编程 和 lombok 实现链式编程
一.链式编程定义 链式编程的原理就是返回一个this对象,就是返回本身,达到链式效果. 二.jdk中 StringBuffer 源码 我们经常用的 StringBuffer 就是 实现了链式的写法. ...
- Java设计模式作业-责任链模式
Java设计模式作业-责任链模式:Web过滤器 文章目录 前言 一.类图 二.代码及测试结果 1.Trouble类 2.Support类 3.CharSupport类 4.TypeTransformS ...
- JAVA设计模式之责任链模式(职责链模式)
转自JAVA设计模式之责任链模式(职责链模式) 责任链/职责链(Chain of Responsibility)模式的定义 为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理 ...
- 链式编程在Java 中的应用
链式编程在Java 中的应用 一.背景 近日在写一个问卷系统的时候,在处理接口返回值的时候,遇到了一些麻烦,总是感觉在处理返回对象的时候,书写的代码有一些冗余,每次都要获取对象,然后设置值,太麻烦了. ...
- Java学习第十二天----方法参数类型以及返回值类型问题、链式编程、package包、权限修饰符、内部类、成员内部类
Java学习第十二天----方法参数类型以及返回值类型问题.链式编程.package包.权限修饰符.内部类.成员内部类 1.方法参数类型: (1)类名作为形式参数: public class MyTe ...
最新文章
- 巧用close_trace命令释放误删trace文件
- 约束理论学习随笔(2)---DBR系统
- HPU1460: 杨八方的表面兄弟
- java布局管理器的应用总结,GridBagLayout布局管理器的应用
- Android用Intent和Bundle传list
- python中的线程之semaphore信号量
- 计算机一级考试复习资料,全国计算机一级考试复习资料
- 数十名工程师作战 5 天,阿里达摩院连夜研发智能疫情机器人
- GIT插件EGIT使用手册
- Xshell7连接VMware15虚拟机上的Ubuntu详细步骤
- 【转】curl 查看一个web站点的响应时间(rt)
- [MySql]默认密码的查找与修改
- [译] A Neural Algorithm of Artistic Style--图片风格化
- python制作fnt字体打包工具
- 字体出现闪烁效果html,CSS3实现文字闪烁效果的多种形式代码
- android文件地址,Android文件夹在哪
- mysql创建/编辑表时的 ROW_FORMAT = Dynamic 和 Compact 有什么区别
- 人民币小写转大写金额(可达千百万亿)
- Android:浏览图片,点击放大至全屏效果
- (侯捷C++)1.1面向对象高级编程(上)
热门文章
- Filezilla server 使用教程
- 通信技术属于计算机相关专业吗,通信技术属于计算机类专业吗
- 从东南亚到中东,为什么社交类产品成为游戏出海的突破口?
- 基于飞桨实现BigGAN生成动漫图像——为艺术创作赋能
- 每个极客都应该知道的Linux技巧(区分开普通的Linux用户和超级极客)
- 360浏览器显示没网络连接服务器,360浏览器无法连接网络?怎么办?
- 导出PDF /home/education/font/simsun.ttc not found as file or resource.
- 直播app系统源码,简单的登录界面(登录、注册、记住密码等按键)
- java日期格式化 类_Java日期格式化(DateFormat类)
- MySQL可视化工具HeidiSQL安装与使用