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

创新互联拥有10多年成都网站建设工作经验,为各大企业提供网站建设、网站设计服务,对于网页设计、PC网站建设(电脑版网站建设)、App定制开发、wap网站建设(手机版网站建设)、程序开发、网站优化(SEO优化)、微网站、空间域名等,凭借多年来在互联网的打拼,我们在互联网网站建设行业积累了很多网站制作、网站设计、网络营销经验,集策划、开发、设计、营销、管理等网站化运作于一体,具备承接各种规模类型的网站建设项目的能力。
那么什么情况下适合使用建造模式呢?
如果你是写过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 = addr
 - return sb
 - }
 - func (sb *ServerBuilder) Port(port string) *ServerBuilder {
 - sb.Server.Port = port
 - return sb
 - }
 - func (sb *ServerBuilder) MaxConn( maxconn int) *ServerBuilder {
 - sb.Server.MaxConns = maxconn
 - return sb
 - }
 - func (sb *ServerBuilder) TimeOut( timeout time.Duration) *ServerBuilder {
 - sb.Server.Timeout = timeout
 - return sb
 - }
 - func (sb *ServerBuilder) Build() (Server) {
 - return sb.Server
 - }
 
接下来就可以使用构建模式创造Server类型的对象了
- server := myserver.Builder().
 - Addr("127.0.0.1").
 - Port("11203").
 - MaxConn(50).
 - Build()
 
这么一来有没有觉得确实比定义一个参数巨多的Server构造函数要好一点呢?
参考链接
https://coolshell.cn/articles/21146.html
                分享名称:Builder模式能用来解决什么问题?
                
                本文URL:http://www.csdahua.cn/qtweb/news18/224618.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网