青山相待

            白云相爱

            梦不到紫罗袍共黄金带

            一茅斋

            野花开

            管甚谁家兴废谁成败

            陋巷单瓢亦乐哉

            贫,气不改!

            达,志不改!

【设计模式】装饰者模式

简介

将核心功能和装饰功能分离, 为已有功能动态新增功能。

详述

装饰者模式英文翻译:Decorator。

装饰者模式类图

component:抽象接口类。

concretecomponent:具体的component类,实现核心功能,也是待添加功能的对象。

decorator:装饰者抽象类,继承自component抽象接口类,实际调用component类的operation方法,提供设置待添加职责对象接口setcomponent。

concretecomponentA:具体的装饰者类A,重写component的operatiron方法 ,concretecomponentA的operation调用ptrcomponent->operation后添加新的职责。

包装过程

concretecomponent* cct = new concretecomponent;

concretedecoratorA* cda = new concretedecoratorA;

concretedecoratorB* cdb = new concretedecoratorB;

cda.setcomponent(cct);

cdb.setcomponent(cda);

cdb.operation();

包装后的cdb.operation就依次执行了cct的operation、cda的operation、cdb的operation,为cct额外增加了cda、cdb两个职责。 

特性及关键点

装饰者对象A和B都通过setcomponent来对对象进行包装,每个装饰对象的实现和使用这个对象分开,A和B类均只需关注自己要增加的额外职责,不需要关心如何将职责增加到对象上。

把装饰功能从类的中去除,简化原有的类,把核心职责和装饰功能分开,去除相关类中重复的装饰逻辑。

小纪

打着瞌睡学完了装饰者模式,好崇拜前辈们,可以说完破了我以前的拙劣设计。 

posted @ 2014-07-06 17:28  Leo.Z  阅读(220)  评论(0编辑  收藏  举报