Builder模式能用来解决什么问题?

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

[[429286]]

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

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

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

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

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

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

  1. import lombok.Builder; 
  2.  
  3. @Builder 
  4. public class Coffee extends BaseEntity implements Serializable { 
  5.     private String name
  6.  
  7.     private Long price; 
  8.    
  9.     ...... 

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

  1. package myserver 
  2. //使用一个builder类来做包装 
  3. type ServerBuilder struct { 
  4.   Server 
  5.  
  6. func Builder () *ServerBuilder { 
  7.   sb := new(ServerBuilder) 
  8.   sb.Server.Addr = "127.0.0.1" 
  9.   sb.Server.Port = "1001" 
  10.   // Server其他成员的默认值 
  11.   ...... 
  12.   return sb 
  13.  
  14. func (sb *ServerBuilder) Protocol(protocol string) *ServerBuilder { 
  15.   sb.Server.Protocol = protocol  
  16.   return sb 
  17.  
  18. func (sb *ServerBuilder) Addr(addr string) *ServerBuilder { 
  19.   sb.Server.Addr = addr 
  20.   return sb 
  21.  
  22. func (sb *ServerBuilder) Port(port string) *ServerBuilder { 
  23.   sb.Server.Port = port 
  24.   return sb 
  25.  
  26. func (sb *ServerBuilder) MaxConn( maxconn int) *ServerBuilder { 
  27.   sb.Server.MaxConns = maxconn 
  28.   return sb 
  29.  
  30. func (sb *ServerBuilder) TimeOut( timeout time.Duration) *ServerBuilder { 
  31.   sb.Server.Timeout = timeout 
  32.   return sb 
  33.  
  34.  
  35. func (sb *ServerBuilder) Build() (Server) { 
  36.   return  sb.Server 

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

  1. server := myserver.Builder(). 
  2.  Addr("127.0.0.1"). 
  3.  Port("11203"). 
  4.  MaxConn(50). 
  5.  Build() 

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

参考链接

 

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

 

责任编辑:武晓燕 来源: 网管叨bi叨
相关推荐

2021-07-16 06:56:50

边缘计算分布式

2020-06-15 08:06:25

ES数据

2019-04-26 13:01:16

ServiceMesh微服务架构

2022-04-04 07:51:32

Web框架

2020-05-22 10:02:43

Python语言编程

2011-11-30 15:28:32

在线协作系统

2021-05-11 10:56:07

DevOps开发工具

2012-09-19 09:45:16

移动互联网广告模式

2014-09-28 10:28:59

Docker云计算

2022-06-29 07:49:42

云存储架构DevOps

2023-11-08 14:03:47

数据可视化数字化转型

2022-03-30 08:08:30

数字孪生制造业

2023-05-31 07:32:37

2020-11-02 13:25:45

Redis数据库开源

2021-12-15 23:42:56

Webpack原理实践

2009-08-04 17:27:18

Actor模型

2021-03-23 18:32:46

JavaScript编程开发

2021-02-08 08:04:52

JavaScript语言OOP

2021-07-13 07:52:03

ReactHooks组件

2018-10-16 16:45:05

数据库读写分离
点赞
收藏

51CTO技术栈公众号