建造模式,也有翻译成生成器模式的,大家看到后知道他们是一个东西,都是Builer Pattern翻译过来的就行。它是一种对象构建模式,是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

那么什么情况下适合使用建造模式呢?

  • 当要构建的对象很大并且需要多个步骤时,使用构建器模式,有助于减小构造函数的大小。

如果你是写过Java程序一定对下面这类代码很熟悉。

Coffee.builder().name("Latti").price("30").build()

当然,自己给Coffee类加上构建模式,还是需要写不少额外的代码,不过Java里有一个lombok包,只要引入这个包再在实体类加上@Builder注解,就可以使用建造模式构建对象啦。

import lombok.Builder;@Builder
public class Coffee extends BaseEntity implements Serializable {private String name;private Long price;......
}

那在Go里面要怎么实现Builder模式呢?仿照上面这个模式,我们可以这样:

package myserver
//使用一个builder类来做包装
type ServerBuilder struct {Server
}func Builder () *ServerBuilder {sb := new(ServerBuilder)sb.Server.Addr = "127.0.0.1"sb.Server.Port = "1001"// Server其他成员的默认值......return sb
}func (sb *ServerBuilder) Protocol(protocol string) *ServerBuilder {sb.Server.Protocol = protocol return sb
}func (sb *ServerBuilder) Addr(addr string) *ServerBuilder {sb.Server.Addr = addrreturn sb
}func (sb *ServerBuilder) Port(port string) *ServerBuilder {sb.Server.Port = portreturn sb
}func (sb *ServerBuilder) MaxConn( maxconn int) *ServerBuilder {sb.Server.MaxConns = maxconnreturn sb
}func (sb *ServerBuilder) TimeOut( timeout time.Duration) *ServerBuilder {sb.Server.Timeout = timeoutreturn sb
}func (sb *ServerBuilder) Build() (Server) {return  sb.Server
}

接下来就可以使用构建模式创造Server类型的对象了

server := myserver.Builder().Addr("127.0.0.1").Port("11203").MaxConn(50).Build()

这么一来有没有觉得确实比定义一个参数巨多的Server构造函数要好一点呢?

参考链接

  1. https://coolshell.cn/articles/21146.html

给网管个星标,第一时间吸我的知识 

一些实用的编程模式 | Builder模式能用来解决什么问题?相关推荐

  1. 建造者模式与原型模式/builder模式与prototype模式/创建型模式

    建造者模式 定义 用于简化复杂对象的创建 JDK中的建造者模式 java.lang.StringBuilder中的append()方法,每次调用后返回修改后的对象本身. public StringBu ...

  2. 火遍全网的Hutool,如何使用Builder模式构建线程池

    前言 Builder 设计模式也叫做 构建者模式或者建造者模式,名字只是一种叫法,当聊起三种名称的时候知道是怎么回事就行 Builder 设计模式在作者编码过程中,属于比较常用的模式之一.优秀的设计模 ...

  3. Android常用设计模式之Builder模式理解

    Android常用设计模式之Builder模式 1 单例模式 2 Builder模式 Builder模式的应用场景 总结 1 单例模式 单例模式之前有详细的介绍,可移步到链接: 常见的单例模式及其特点 ...

  4. Effective Java:Builder模式

    在Java中遇到多个参数时,有3种方式可以构造类. 一.重叠构造器(telescoping constructor)模式 这种模式下,在类中有多个使用不同参数的构造函数,需要什么参数,就写一个相应的构 ...

  5. Builder模式简单理解

    Builder 模式 Builder模式 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 那么Builder模式的用场景呢? (1) 相同的方法,不同的执行顺序,产生不同的 ...

  6. 一些实用的编程模式 | Options模式

    今天开个新系列,讲一些实用的编程模式,每个编程模式学完后,都能马上在实战中应用起来,让我们写出更富表达力.易维护.好扩展.优雅亿点点的代码. 这些编程模式的示例我会用Go来演示,但其实这些模式大多与语 ...

  7. Android Builder模式在开发中的应用

    最近在学习图片加载框架Glide的时候,被他精简的写法震惊了.一句话,就可以搞定. Glide.with(mContext) .load(url) .centerCrop() .placeholder ...

  8. 使用Builder模式创建复杂可选参数对象

    在新建对象时,若需要对大量可选参数进行赋值,最常见的做法是JavaBeans模式,即调用一个无参构造方法创建对象,然后调用setter方法来设置每个必要的参数,以及每个相关的可选参数.代码示例如下: ...

  9. Java 高效编程之 Builder 模式

    前言 在<Effective Java 第2版>中有提到,遇到多个构造器参数时要考虑使用构建器(Builder模式).相比于重叠构造器(telescoping constructor)模式 ...

最新文章

  1. 使用链路聚合进行负载分担
  2. 线程池 And 线程池的使用(基于.net平台)
  3. 解决Redis超卖问题
  4. 旧金山字体_旧金山建筑业的兴衰。 施工趋势与历史
  5. SharePoint 2013的100个新功能之搜索(一)
  6. java list 改变变量的值_3、list改变指针还是改变值
  7. Python学习day07 - Python进阶(1) 内置方法
  8. 基于树莓派的语音邮件收发
  9. Adobe全系列软件介绍
  10. centos7下载php7.4
  11. Hbase数据库介绍
  12. MTK最新工具(刷机,写号,升级等)合集含工具源码
  13. 大数据与云计算之间的关系
  14. java成员变量是什么
  15. 新一代智能会议中控系统
  16. Linux Bind 安装
  17. Android实现简单的欢迎界面
  18. Symbolic Graph Reasoning Meets Convolutions 符号图推理与卷积结合的方式
  19. java怎么语音转换成文字_Annyang将语音转换为文本
  20. 新装的windows遇到命令行脚本无法执行

热门文章

  1. C#实现图片文件到数据流再到图片文件的转换
  2. mysql 案例~ 主从复制转化为级联复制
  3. Spring AOP AspectJ
  4. 2.请求安全-- MD5的必要性以及实际应用场景
  5. 解决firefox字体发虚的问题
  6. 我的DWR学习(二)
  7. MySQL prepare语句的SQL语法
  8. Python入门很难吗? 为什么越来越多的人都学Python?
  9. vue2.0 自定义 生成二维码(QRCode)组件
  10. sqlite可视化工具推荐