当前位置: 首页 > 科技观察

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

时间:2023-03-12 07:25:12 科技观察

建造模式也翻译成建造者模式。大家看到之后就知道是同一个东西了,都是从BuilderPattern翻译过来的。它是一种对象构造模式,将复杂对象的构造与其表示分离,使得相同的构造过程可以创建不同的表示。那么什么时候适合使用构造模式呢?当要构建的对象很大,需要多个步骤时,使用构建器模式有助于减小构造器的大小。如果你写过Java程序,你一定对下面的代码很熟悉。Coffee.builder().name("Latti").price("30").build()当然,你还是需要自己写很多额外的代码来给Coffee类添加构建模式,但是有Java中的一个lombok包,只要导入这个包,在实体类上加上@Builder注解,就可以使用构造模式来构建对象。importlombok.Builder;@BuilderpublicclassCoffeeextendsBaseEntityimplementsSerializable{privateStringname;privateLongprice;......}Go中Builder模式如何实现?按照上面的模式,我们可以这样做:packagemyserver//使用构建器类来打包typeServerBuilderstruct{Server}funcBuilder()*ServerBuilder{sb:=new(ServerBuilder)sb.Server.Addr="127.0.0.1"sb.Server.Port="1001"//其他Server成员的默认值……returnsb}func(sb*ServerBuilder)Protocol(protocolstring)*ServerBuilder{sb.Server.Protocol=protocolreturnsb}func(sb*ServerBuilder)地址(地址字符串)*ServerBuilder{sb.Server.Addr=addrreturnsb}func(sb*ServerBuilder)端口(端口字符串)*ServerBuilder{sb.Server.Port=portreturnsb}func(sb*ServerBuilder)MaxConn(maxconnint)*ServerBuilder{sb.Server.MaxConns=maxconnreturnsb}func(sb*ServerBuilder)TimeOut(timeouttime.Duration)*ServerBuilder{sb.Server.Timeout=timeoutreturnsb}func(sb*ServerBuilder)Build()(Server){returnsb.Server}然后你可以使用构建模式创建一个服务器类型的对象server:=myserver.Builder().Addr("127.0.0.1";).Port("11203").MaxConn(50).Build()你认为它比定义一个带有很多参数的Server构造函数更好吗?参考链接https://coolshell.cn/articles/21146.html