装饰模式 (Decoratory)

动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更灵活。

装饰模式就是利用 SetComponent 来对对象进行包装的,这样每个装饰对象的实现就和如何使用这个对象分离开了,每个装饰对象只关心自己的功能。不需要关心如何添加到对象链当中的。

如果只有一个 ConcreteComponent 类而没有抽象的 Component 类,那么 Decorator 类可以是 ConcreteComponent 的一个子类,同样的道理,如果只有一个 ConcreteDecorator 类,那么没必要建立一个单独的 Decorator 类,而是把 Dceorator 和 ConcreteDecorator 的责任合并成一个类。

装饰模式是为已有功能动态添加更多功能的一种方式,使用的场合:

当系统需要新功能的时候,是向旧系统类中添加新的代码,这些新加的代码通常装饰了原有类的核心职责或主要行为,在主类中添加了新的字段,新的方法和新的逻辑,从而增加了主类的复杂度,这些新加入的东西仅仅是为了满足一些只在特定情况下才会执行的特定的操作行为和需要。

装饰模式把每个要装饰的功能放在单独的类中,并让这个类包装它要装饰的对象,因此,当需要执行特殊的行为时,客户代码就可以在运行时,根据需要有选择地,按顺序地使用装饰功能包装对象。这样做的最大好处是:有效地把类的核心职责和装饰功能区分开了,而且可以去除相关类中重复的装饰逻辑。

时间: 2024-12-11 05:43:16

装饰模式 (Decoratory)的相关文章

【设计模式】装饰模式

1.定义 1.1 标准定义 装饰模式(Decorator Pattern)是一种比较常见的模式,其定义如下:Attach additionalresponsibilities to an object dynamically keeping the same interface.Decorators provide a flexiblealternative to subclassing for extending functionality.(动态地给一个对象添加一些额外的职责.就增加功能来说

(四)装饰模式-C++实现

动态地给对象添加一些额外的职责.就功能来说,装饰模式相比派生子类更为灵活. 当需要改进类的某个功能,而不是该类创建的全部对象时,可以使用这种设计模式. 装饰模式中有四种角色; 1.抽象组件:我们需要改进的类的父类,是一个抽象类.定义了一些虚函数. 2.具体组件:也就是它的某些对象可能需要被改进.也叫做被装饰者. 3.装饰:它也是抽象组件的子类,并且还包含一个抽象组件的声明,用来保存被装饰者的引用.它可以是抽象类,也可是是非抽象类. 4.具体装饰:它是装饰的实例. 本例实现的是一个Bird,作为一

设计模式学习-装饰模式

1.什么是装饰模式 装饰模式,在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象.动态地给一个对象添加一些额外的职责.这样是能够把类中的装饰功能从类中搬移出去,这样可以简化原有的类.有效地把类的核心功能和装饰功能区分开了. 2.装饰模式的实现 在本例子中,举例最常见的人穿衣服的例子,首先我们定义这样一个Person的基类,如下: #include <cstdio> #include <string> #include

22装饰模式

 1装饰模式的核心内容是: A:通过中间这向多方发送消息 2装饰模式的作用:. 3装饰模式具体描述 装饰模式:装饰模式以对客户端透明的方式扩展对象的功能, 是继承关系的一个替代方案,提供比继承更多的灵活性. 动态给一个对象增加功能,这些功能可以再动态的撤消. 增加由一些基本功能的排列组合而产生的非常大量的功能. Mary过完轮到Sarly过生日,还是不要叫她自己挑了, 不然这个月伙食费肯定玩完,拿出我去年在华山顶上照的照片, 在背面写上"最好的的礼物,就是爱你的Fita", 再到街

用装饰模式优化的一个实例2

业务场景 写一个数据层的loader,loader的数据拉取有可能走本地或者走网络,所以肯定需要通过回调来返回数据,而且两种情况在view层的表现不一样,也需要通过回调来告知 优化前 于是我一开始设计了这么两个接口来进行区分处理,而对于每个接口,都像网络请求一样写了4个回调,以适应任何意外情况 public interface ShortLoadAction<T> { void onStartShort(); void onCancelShort(); void onBrokenShort()

c++ 设计模式6 (Decorator 装饰模式)

4. "单一职责"类模式 在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划清责任. 典型模式代表: Decorator,Bridge 4.1 Decorator 装饰模式 代码示例:不同的流操作(文件流,网络流,内存流)及其扩展功能(加密,缓冲)等的实现 实现代码1: 类图结构示意(大量使用继承) 数据规模: 假设有n种文件,m种功能操作.该实现方法有(1 + n + n * m! / 2) 数量级的子

7 结构型模式之 - 装饰模式

装饰模式介绍:装饰模式也称为包装模式,是结构型模式之一,其使用一种对客户端透明的方式来动态地扩展对象的功能,同时它也是继承关系的一种替代方案之一.在现实生活中你也可以看见很多装饰模式的例子,或者可以大胆地说装饰模式无处不在,就拿人来说,人需要各式各样的衣着,不管你穿着怎样,但是,对于个人的本质来说是不变的,充其量只是在外面披上一层包装而已,这就是装饰模式,装饰物也许各不相同但是装饰的对象本质是不变的. 装饰模式的定义:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式相比生成子类更加灵

Java设计模式----装饰模式

1.概念: (在我看来,模式就像是是一种思想,在这种思想的指引下,对代码和结构的一番加工和整合而已!都是套路!) 装饰模式又称包装(Wrapper)模式,是以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案.对客户端透明意味着接口不变. 2.问题: 在OO设计和开发过程中, 经常会遇到下面的情况: 我们需要为已经设计好的类添加新的职责, 通常情况下我们会定义一个新类继承自定义好的类. 由于组合比继承更好(复杂度高,继承深度深等原因, 类图: 3.如何实现装饰: (1):继承形式:(不推

JAVA设计模式:装饰模式

前面我们学习了代理模式: 代理模式主要使用了java的多态,干活的是被代理类,代理类主要是接活,你让我干活,好,我交给幕后的类去干,你满意就成,那怎么知道被代理类能不能干呢?同根就成,大家知根知底,你能做啥,我能做啥都清楚得很,同样一个接口. 本次我们学习下装饰模式: 装饰模式又称为包装模式,装饰模式以对客户端透明的方式扩展对象功能,相对于代理而言,代理是不让客户端知道真实对象的信息,装饰模式是基层关系的一个替代方案. 装饰模式是采用对客户端透明的方式动态的给一个对象添加了更多职责,对于原来被装