结构行模型 装饰者模式(Decorator)

装饰者模式(Decorator)是一种设计模式,用于在不修改原有对象代码的情况下,通过包装对象来扩展其功能。文章介绍了装饰者模式的介绍、术语、角色、案例和代码示例,展示了如何通过装饰者模式解决扩展功能的问题,以及其优缺点和适用场景。
摘要由CSDN通过智能技术生成

目录

一.装饰者模式介绍

二.术语

        ConcreteCompent:

         Decorator:

        ConcreteDecorator:

三.角色

四. 案例

五.代码示例

        1.未使用设计模式之前:

             1.运行效果图:

                2.上面的代码存在问题:

        使用设计模式之后:

六.总结

        装饰者模式的优点:

         装饰者模式的缺点: 

         适用场景:


一.装饰者模式介绍

装饰者模式又称为包装模式,它主要是为了扩展对象的功能,通过持有对象的引用,把对象包装起来,可以在调用对象的方法之前或者之后增加新的功能,以达到给对象添加一些额外的职责,就像为对象添加了一些装饰。

另一个要点是,包装者可以有很多个,对象被包装了一层之后,依然可以继续再包装来添加新的职责。添加职责的目的其实就是为了扩展对象的功能,通过使用装饰者模式可以使得系统具有非常好的弹性。遵循了面向对象原则:对扩展开放,对修改关闭。如果有新的需求变更,对象功能扩展,只需要新增一个装饰者类,将对象包装起来即可扩展对象的功能,而不需要对旧有对象代码进行修改。

通过继承,子类进行方法重写同样也可以扩展对象的功能。但它的弹性比较差,一旦业务变更或新增业务功能时,就需要打开实现类的代码进行修改,这样不仅需要检查旧有代码,同时还要保证新增代码的正确性。类的继承关系是在编译期就已经确定好了,运行期间不能动态的更改,使用装饰者模式可以在运行期间动态的、不限量的给对象添加装饰者,扩展功能。装饰者模式是替代继承来扩展对象功能更好的方案。

二.术语

        ConcreteCompent:

是需要扩展功能的对象或者叫组件对象。

         Decorator:

是装饰者类共同实现的接口或抽象类,它和ContreateCompent具有相同的超类型,并且持有一个待扩展对象的引用。

        ConcreteDecorator:

A等是具体的装饰者类,它们可以给引用的组件对象加上新的方法。新的方法通过在旧的方法的前面或者后面做一些计算来添加。

注意:concreteComponent、Decorator都会实现或继承Component

三.角色

 - Client 类:装饰模式的调用者
  - **Component**:主体===》饮料(Drink)
  - **concreteComponent**:被装饰者===》咖啡(Coffee)
  - xxxConcreteComponent:具体的被装饰者(ChinaCoffee)
    美式咖啡、欧式咖啡、中式咖啡
  - **Decorator**:装饰器===》调料
  - xxxDecorator:子装饰器
    糖类、奶酪、牛油、芥末
 

四. 案例

单体咖啡与调味组合的饮料计价项目

 这个项目最容易想到的设计方案就是采用继承的设计方案,设计思路如下:

​  Drink===》饮品

​     Juice===》果汁

​        .......

​     Coffee===》咖啡

​        ChinaCoffee===》中式咖啡

​           ASeasoningChinaCoffee===》被A调料修饰的中式咖啡

​           BSeasoningChinaCoffee===》被B调料修饰的中式咖啡

​           ......

​        XxxCoffee===》其它咖啡

​           ASeasoningXxxCoffee===》被A调料修饰的其它咖啡

​           BSeasoningXxxCoffee===》被B调料修饰的其它咖啡

​           ......

上面每个类中都有getPrice计价的功能,从结果上来看ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值