当前位置: 首页 > news >正文

网站安全检测报告unas做网站服务器

网站安全检测报告,unas做网站服务器,深圳建设网站公,网站信息发布系统目录 建造者模式(Builder Pattern) 建造者模式的核心角色 优缺点 使用场景 注意事项 代码实现 建造者模式(Builder Pattern) 建造者模式(Builder Pattern)是将一个复杂对象的构建与它的表示分离&…

目录

建造者模式(Builder Pattern)  

建造者模式的核心角色

优缺点

使用场景

注意事项

代码实现


建造者模式(Builder Pattern)  

       建造者模式(Builder Pattern)是将一个复杂对象构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。

建造者模式的核心角色

        1、抽象建造者(Builder):是为创建一个Product对象的各个部件指定的抽象接口。

        2、具体建造者(ConcreteBuilder):实现Builder接口,构造和装配各个部件。

        3、指挥者(Director):是构建一个实用Builder接口的对象。一方面它隔离了客户与生产过程;另一方面它负责控制产品的生成过程。

        4、产品角色(Product):具体的产品

优缺点

(1)优点:

  • 分离构建过程和表示,使得构建过程更加灵活,可以构建不同的表示。
  • 可以更好地控制构建过程,隐藏具体构建细节。
  • 代码复用性高,可以在不同的构建过程中重复使用相同的建造者。

(2)缺点:

  • 如果产品的属性较少,建造者模式可能会导致代码冗余。
  • 建造者模式增加了系统的类和对象数量。

使用场景

        建造者模式在创建复杂对象时非常有用,特别是当对象的构建过程涉及多个步骤或参数时。它可以提供更好的灵活性和可维护性,同时使得代码更加清晰可读。

  • 需要生成的对象具有复杂的内部结构。
  • 需要生成的对象内部属性本身相互依赖

注意事项

        与工厂模式的区别是:建造者模式更加关注与零件装配的顺序。

代码实现

package mainimport ("errors""fmt"
)// Product内的参数
type ResourceParams struct {name     stringmaxTotal int64maxIdle  int64minIdle  int64
}// Product接口
type ResourceProduct interface {show()
}// 实际Product,有show函数
type RedisResourceProduct struct {resourceParams ResourceParams
}// show成员函数,用于显示product的参数内容
func (p *RedisResourceProduct) show() {fmt.Printf("Product的数据为 %+v ", p.resourceParams)
}// 资源类创建接口
type ResourceBuilder interface {setName(name string) ResourceBuildersetMaxTotal(maxTotal int64) ResourceBuildersetMaxIdle(maxIdle int64) ResourceBuildersetMinIdle(minIdle int64) ResourceBuildergetError() errorbuild() (p ResourceProduct)
}// 实际建造者
type RedisResourceBuilder struct {resourceParams ResourceParamserr            error
}// 设置名称
func (r *RedisResourceBuilder) setName(name string) ResourceBuilder {if name == "" {r.err = errors.New("name为空")return r}r.resourceParams.name = namefmt.Println("RedisResourceBuilder setName ", name)return r
}// 设置maxTotal值,值不能小于0
func (r *RedisResourceBuilder) setMaxTotal(maxTotal int64) ResourceBuilder {if maxTotal <= 0 {r.err = errors.New("maxTotal小于0")return r}r.resourceParams.maxTotal = maxTotalfmt.Println("RedisResourceBuilder setMaxTotal ", maxTotal)return r
}// 设置maxIdle值,值不能小于0
func (r *RedisResourceBuilder) setMaxIdle(maxIdle int64) ResourceBuilder {if maxIdle <= 0 {r.err = errors.New("maxIdle小于0")return r}r.resourceParams.maxIdle = maxIdlefmt.Println("RedisResourceBuilder setMaxIdle ", maxIdle)return r
}// 设置minIdle值,值不能小于0
func (r *RedisResourceBuilder) setMinIdle(minIdle int64) ResourceBuilder {if minIdle <= 0 {r.err = errors.New("minIdle小于0")return r}r.resourceParams.minIdle = minIdlefmt.Println("RedisResourceBuilder setMinIdle ", minIdle)return r
}// 获取错误信息
func (r *RedisResourceBuilder) getError() error {return r.err
}// 构建product: 1. 做参数校验  2. 根据参数生成product
func (r *RedisResourceBuilder) build() (p ResourceProduct) {// 校验逻辑放到这里来做,包括必填项校验、依赖关系校验、约束条件校验等if r.resourceParams.name == "" {r.err = errors.New("name为空")return}if !((r.resourceParams.maxIdle == 0 && r.resourceParams.minIdle == 0 && r.resourceParams.maxTotal == 0) ||(r.resourceParams.maxIdle != 0 && r.resourceParams.minIdle != 0 && r.resourceParams.maxTotal != 0)) {r.err = errors.New("数据需要保持一致")return}if r.resourceParams.maxIdle > r.resourceParams.maxTotal {r.err = errors.New("maxIdle > maxTotal")return}if r.resourceParams.minIdle > r.resourceParams.maxTotal || r.resourceParams.minIdle > r.resourceParams.maxIdle {r.err = errors.New("minIdle > maxTotal|maxIdle")return}fmt.Println("RedisResourceBuilder build")product := &RedisResourceProduct{resourceParams: r.resourceParams,}return product
}// 指挥者
type Director struct {
}// 指挥者控制建造过程
func (d *Director) construct(builder ResourceBuilder) ResourceProduct {resourceProduct := builder.setName("redis").setMinIdle(10).setMaxIdle(10).setMaxTotal(20).build()err := builder.getError()if err != nil {fmt.Println("构建失败,原因为" + err.Error())return nil}return resourceProduct
}func main() {builder := &RedisResourceBuilder{}director := &Director{}product := director.construct(builder)if product == nil {return}product.show()
}
http://www.yayakq.cn/news/808006/

相关文章:

  • 免费建设钓鱼网站平台学做吃的网站
  • 医疗网站建设管理广东网站备案查询系统
  • 衡阳退休职工做面膜网站公司内部网站怎么制作
  • 自己做的网站如何在百度被搜索到网站构造下拉列表怎么做
  • 手机网站网络环境网站用亚马逊做标题会侵权吗
  • 长春市长春网站建设哪家好怎么用大淘客做网站
  • wap网站制作哪家好网站建设着
  • 阿里云对象存储做静态网站天津建设网站首页
  • 余杭区网站建设株洲网站建设方案咨询
  • 旅游海外推广网站建设方案做网站 推广
  • 建设大型网站需要什么硬件企业做网站的费用怎么入账
  • 昆山做网站wordpress 网页模块错位
  • 建站公司联系电话施工企业信用评价
  • 王野摩托车官方网站合肥360seo排名
  • 樱花动漫做网站商务网站开发公司
  • 公司网站开发实例自助 建站
  • 鹤壁做网站公司电话wordpress什么叫静态
  • 网页搭建初衷网站seo设置是什么
  • 口碑好的网站推广软件电影网站建设教学视频
  • 做设计素材网站山东省双体系建设网站
  • 郑州模板建站多少钱门户网站建设请示
  • 怎么做浏览网站的小程序网络培训心得体会1000字
  • wnmp搭建后怎么做网站卖摄影作品的网站
  • 公司网站建设怎么入账体育新闻最新消息乒乓球
  • 焦作网站建设汕头多语种网站制作
  • 网站排名网站优化百度关键词搜索趋势
  • 图书网站开发需求文档模板php编程用什么软件
  • 做网站用什么语言制作最安全网络服务公司有哪些
  • 益阳网站建设公司有哪些物流网站建设评析
  • 广州比较好的网站设计什么软件做电影短视频网站