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

济南网站建设外包公司/58百度搜索引擎

济南网站建设外包公司,58百度搜索引擎,网店装修的流程是什么,天涯武汉论坛目录 装饰器模式(Decorator Pattern) 装饰器模式的核心角色: 优缺点 使用场景 代码实现 装饰器模式(Decorator Pattern) 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功…

目录

装饰器模式(Decorator Pattern)  

装饰器模式的核心角色:

优缺点

使用场景

代码实现


装饰器模式(Decorator Pattern)  

        装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。装饰器模式通过将对象包装在装饰器类中,以便动态地修改其行为。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。

装饰器模式的核心角色

  • 抽象组件(Component):定义了对象的接口,可以是一个抽象类或接口。
  • 具体组件(ConcreteComponent):实现了抽象组件的接口,是被装饰的对象。
  • 装饰器(Decorator):维持一个指向抽象组件对象的引用,并实现了抽象组件的接口。
  • 具体装饰器(ConcreteDecorator):具体的装饰器对象,用于扩展具体组件的功能。

优缺点

(1)优点:

  • 装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。

(2)缺点:多层装饰比较复杂。

使用场景

  • 扩展一个类的功能。
  • 动态增加功能,动态撤销。

代码实现

package mainimport ("fmt"
)// 抽象组件:咖啡接口
type Coffee interface {GetDescription() stringGetCost() float64
}// 具体组件:原味咖啡
type PlainCoffee struct{}func (c *PlainCoffee) GetDescription() string {return "Plain Coffee"
}func (c *PlainCoffee) GetCost() float64 {return 1.0
}// 装饰器:配料装饰器
type IngredientDecorator struct {coffee    CoffeeextraCost float64extraDesc string
}func (d *IngredientDecorator) GetDescription() string {return d.coffee.GetDescription() + ", " + d.extraDesc
}func (d *IngredientDecorator) GetCost() float64 {return d.coffee.GetCost() + d.extraCost
}// 具体装饰器:牛奶装饰器
type MilkDecorator struct {IngredientDecorator
}func NewMilkDecorator(coffee Coffee) *MilkDecorator {return &MilkDecorator{IngredientDecorator{coffee:    coffee,extraCost: 0.5,extraDesc: "Milk",},}
}// 具体装饰器:糖浆装饰器
type SyrupDecorator struct {IngredientDecorator
}func NewSyrupDecorator(coffee Coffee) *SyrupDecorator {return &SyrupDecorator{IngredientDecorator{coffee:    coffee,extraCost: 0.3,extraDesc: "Syrup",},}
}func main() {coffee := &PlainCoffee{}fmt.Println("Coffee:", coffee.GetDescription(), "Cost:", coffee.GetCost())coffeeWithMilk := NewMilkDecorator(coffee)fmt.Println("Coffee with Milk:", coffeeWithMilk.GetDescription(), "Cost:", coffeeWithMilk.GetCost())coffeeWithMilkAndSyrup := NewSyrupDecorator(coffeeWithMilk)fmt.Println("Coffee with Milk and Syrup:", coffeeWithMilkAndSyrup.GetDescription(), "Cost:", coffeeWithMilkAndSyrup.GetCost())
}
http://www.jmfq.cn/news/5360779.html

相关文章:

  • 餐饮网站建设方案书/seo是什么缩写
  • 温岭网站建设联系电话/优化设计四年级上册语文答案
  • 网站YYQQ建设/网站有哪些平台
  • 烟台网站建设公司报价/网站之家
  • 网站建设论文答辩题目/流量点击推广平台
  • 电子商务网站建设步/seo查询软件
  • 贵安新区微信网站建设/网站seo哪家公司好
  • 网站建设服务合同 印花税/郑州网站公司哪家好
  • 南水北调中线干线工程建设管理局网站/哪里做网络推广好
  • 济南商城网站建设/长春网站优化指导
  • 推进政府网站建设的措施/厦门网站建设公司
  • 邯郸住房城乡建设厅网站/中国科技新闻网
  • 电子商务网站建设规划书/聊城今日头条最新
  • 91大神网站建设/参考网是合法网站吗?
  • 深圳市建设厅官方网站/注册网站流程和费用
  • 密云重庆网站建设/武汉网站排名推广
  • 南宁市建设局网站/app排名优化公司
  • 广州口碑好的网站建设/百度推广营销
  • 鞍山建设集团网站/网络口碑营销案例分析
  • 县政府网站建设工作任务/推广获客
  • 网站建设网站优化相关资讯文章/江苏网页定制
  • 政府网站内容建设管理规范/成人职业技能培训有哪些项目
  • 宁夏建设工程招标投标信息管理中心网站/百度公司招聘
  • 汝阳县住房与城乡建设局建局网站/电商网站如何避免客户信息泄露
  • 企业网站建设上机考试/百度2022新版下载
  • 最好网站建设公司/网络销售推广公司
  • 陕西建设厅网站人才库/网络营销方案
  • 广州乐地网站建设公司/湖北荆门今日头条
  • 电子商务网站建设前期准备/软文代写新闻稿
  • 创新的品牌网站建设/厦门百度公司