builder模式也叫建造者模式,builder模式的作用将一个复杂对象的构建与他的表示分离,使用者可以一步一步的构建一个比较复杂的对象。示例如下:
- public static void main(String[] args) {
- MetaVo metaVo = new MetaVo();
- metaVo.setIcon("1")
- .setTitle("2")
- .setNoCache(true);
- System.out.println(metaVo);
-
- }
这种设计模式的精髓就主要有两点:其一,用户使用简单,并且可以在不需要知道内部构建细节的情况下,就可以构建出复杂的对象模型;其二,对于设计者来说,这是一个解耦的过程,这种设计模式可以将构建的过程和具体的表示分离开来。
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,则不会被
缓存 - */
- 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;
- }
-
- @Override
- public 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);
-
- }
- @Data
- //需要加上这个注解
- @Accessors(chain = true)
- public class Menu extends Model
-
- }
另外,常用的StringBuffer的append()方法,是不是觉的很相似,源码如下:
偶然阅读一篇文章,忽然想起了这个,记录下所得;