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

网站建设价格方案网站建设氺首选金手指14

网站建设价格方案,网站建设氺首选金手指14,wordpress文章页有英语,重庆sem网站推广文章目录 装饰器模式装饰器模式当中的角色和职责装饰器模式的代码实现装饰器模式与代理模式有何不同?装饰器模式的优缺点适用场景 装饰器模式 装饰器模式(Decorator Pattern):动态地给一个对象增加一些额外的职责,对于…

文章目录

  • 装饰器模式
    • 装饰器模式当中的角色和职责
    • 装饰器模式的代码实现
    • 装饰器模式与代理模式有何不同?
    • 装饰器模式的优缺点
    • 适用场景

装饰器模式

装饰器模式(Decorator Pattern):动态地给一个对象增加一些额外的职责,对于“增加对象功能”而言,装饰器模式比生成子类实现更为灵活,且装饰器模式可以无限叠加。
在这里插入图片描述

装饰器模式当中的角色和职责

装饰器模式的标准类图如下:

画板

  • Component(抽象构件):是具体构件和抽象装饰器的共同父类,声明了在具体构件中需要实现的业务方法。
  • ConcreteComponent(具体构件):是抽象构件的子嘞,用于定义具体的构件对象。装饰器可以为它添加额外的职责(方法)。

装饰器模式的代码实现

参考《Easy 搞定 Golang 设计模式》,下面以“添加手机配件”为场景,实现一个使用装饰器模式的 Demo:

package mainimport "fmt"// --- --- --- 抽象层 --- --- ---
// 定义抽象的构件
type Phone interface {Show() // 构件的功能
}// 装饰器基础类, 本应该定义为 interface, 但由于 Golang 的 interface 只有方法没有成员, 所以定义为 struct
type Decorator struct {phone Phone // 通过组合的方式实现 Decorator 基础类
}func (d *Decorator) Show() {}// --- --- --- 实现层 --- --- ---
// 定义具体的构件
type Apple struct{}func (ap *Apple) Show() {fmt.Println("正在使用苹果手机...")
}type Realme struct{}func (rm *Realme) Show() {fmt.Println("正在使用真我手机...")
}// 定义具体的装饰器
type TiemoDecorator struct {Decorator // 继承基础的装饰器类(主要继承 Phone 的成员属性)
}func (td *TiemoDecorator) Show() {td.phone.Show() // 调用被装饰构件的原方法fmt.Println("贴膜的手机")
}func NewTiemoDecorator(phone Phone) Phone {return &TiemoDecorator{Decorator{phone}}
}type ShoujikeDecorator struct {Decorator
}func (sd *ShoujikeDecorator) Show() {sd.phone.Show()fmt.Println("加装手机壳的手机")
}func NewShoujikeDecorator(phone Phone) Phone {return &ShoujikeDecorator{Decorator{phone}}
}func main() {var iphone Phoneiphone = new(Apple)iphone.Show() // 调用原构件的方法var tiemoIPhone PhonetiemoIPhone = NewTiemoDecorator(iphone)tiemoIPhone.Show()var shoujikeIPhone PhoneshoujikeIPhone = NewShoujikeDecorator(iphone)shoujikeIPhone.Show()var tiemoAndShoujikeIPhone PhonetiemoAndShoujikeIPhone = NewShoujikeDecorator(tiemoIPhone)tiemoAndShoujikeIPhone.Show()
}

装饰器模式与代理模式有何不同?

装饰器模式相较于代理模式而言,其动态性更好一些。可以根据不同的场景选择不同的模式,比如对于逻辑上需要增加的场景,可以使用代理模式;而对于需要无状态平行增加功能的场景,则可以选用装饰器模式,因为装饰器模式可以进行无状态的迭代。

装饰器模式的优缺点

优点

  1. 对于扩展一个对象的功能,装饰器模式比继承更加灵活,不会导致类的个数急剧增加;
  2. 可以通过一种动态的方式来扩展一个对象的功能,从而实现不同的行为;
  3. 可以对一个对象进行多次装饰(无状态地平行添加功能);
  4. 具体的构件类与具体的装饰器类可以独立变化,用户可以根据需要新增具体构件类和具体装饰器类,原有代码无需改变,符合“开闭原则”。

缺点

  1. 使用装饰器模式进行系统设计时会产生很多小的对象,大量小对象的产生势必会占用更多的系统资源,影响程序性能;
  2. 装饰器模式比继承更加灵活,但同时也意味着相较于继承,装饰器模式更容易出错。对于多次装饰的对象,如果出现问题,调试时需要逐级排查,较为繁琐。

适用场景

  1. 通过动态、透明的方式为单个对象添加职责;
  2. 当不能采用继承的方式对系统进行扩展或采用继承不利于系统扩展与维护时,可以使用装饰器模式。
http://www.dtcms.com/wzjs/590093.html

相关文章:

  • 东莞市建设工程质量监督网站品牌注册证
  • p2p网站建设小微金融凡客官网登录入口网址
  • 企业网站特色建设企业文化建设网站
  • 科技政策要聚焦自立自强seo综合查询是什么
  • 网站升级通知自动跳跃帝国cms网站地图xml
  • 黑龙江省建设厅官方网站舟山论坛网站建设
  • 公众号免费素材网站黑龙江建筑工程网
  • 北京网站建设q479185700強杭州四喜做网站建设么
  • 聊城哪里有做网站的wordpress接入翼支付宝
  • 管理咨询公司企业文化网站排名优化系统
  • 更换网站程序黄山网站建设电话
  • 网站搭建教学上海人才服务网官网
  • 一个好的网站建设厚街网站建设报价
  • 做订餐网站数据库应该有哪些表如何制作小程序下单
  • 织梦网站装修公司源码好用的免费网站
  • 网站建站工具有哪些介绍网站设计风格
  • 做关键词优化需要修改网站标题网站建设关闭窗口代码
  • 饮食网站开发需求深圳外贸soho网站建设
  • 个人直播网站开发能制作网站的公司联系方式
  • 百度商桥怎么添加到网站免费广告投放平台
  • 体育网站建设青岛网站建设谁家好一些
  • 网站建设报价明细单优化网站作用
  • 做网站用windows和 linux重庆市建设施工程信息网
  • 开发个网站开票名称是什么意思wordpress建多语言分站
  • 1.申请网站空间wordpress风格化页面
  • asp网站怎么打开青海保险网站建设公司
  • 湛江企业网站怎么建设自建社区网站
  • 周口网站开发类似wordpress的博客系统
  • 南昌县建设局网站广州公司电商网站建设
  • 三亚网站建设价格企业网站源码库