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

用自己电脑建网站个人建站 wordpress

用自己电脑建网站,个人建站 wordpress,微信运营推广方式,wordpress 主域名目录 建造者模式(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.yingshimen.cn/news/207/

相关文章:

  • 大学生旅游网站设计框架本地江苏网站建设
  • 运城网站建设求职简历做企业网站还有钱挣吗
  • 视频链接生成网站郑州网站建设华久
  • 烟台做网站谁家好食品网站app建设
  • 交互设计个人网站wordpress首页怎么设置
  • 网站外链坏处推广恶意点击软件怎样使用
  • 湖南 微网站开发与设计比赛建设集团公司
  • 企业做的网站计入什么科目seo职业
  • 建设营销型网站wordpress 表格不显示线
  • 鄱阳网站建设多少钱什么是网页设计培训
  • 青岛做网站的公司排名wordpress 带宽购物
  • 网站备案信息被工信部删除oa系统登录
  • 网站弹出文字网站降权的表现
  • 红河做网站的公司什么是wordpress主题
  • 国外效果超炫网站宁波建站服务
  • 物流公司网站建设方案电子商城网站开发的背景
  • 如何把网站让百度录用用tornado做网站
  • 大学生网站建设方案建网站的系统
  • 怎么做可以聊天的网站中国新闻社招聘公示
  • 自己怎么注册网站模板西安网站设计公司
  • 余姚住房和建设局网站wordpress查看全文
  • 域名与网站的区别系统开发环境有哪些
  • 济南高新区 网站制作天津专业制作企业官网
  • 手机网站有哪些wordpress 注入攻击
  • 正宗营销型网站建设水利建设相关网站
  • 为什么简洁网站会受到用户欢迎百度电话人工服务
  • 大连做网站科技有限公司店铺首页如何设计
  • 浙江省住房和城乡建设厅网站智能搭建网站
  • 网站管理员怎样管理长沙自动seo
  • 百度上传网站服务器百度指数查询官网入口