首页 > 编程知识 正文

23种设计模式总结,装饰者模式定义

时间:2023-05-06 06:18:54 阅读:135288 作者:4239

轮廓装饰模式,也称为包装模式,通过对客户端透明地扩展对象的功能来代替继承关系。

装饰模式是将附加的功能放在不同的类中,该类包含要装饰的对象,以便客户端可以在需要执行时选择使用装饰功能按顺序包装对象。

二UML图

Component (抽象构件)是具体构件和抽象装饰类的共同父类,用于声明具体构件中实现的业务方法。 通过该部署,客户端可以以一致的方式处理未装饰的对象和装饰的对象,实现客户端的透明操作。 ConcreteComponent (具体组件) :定义具体组件对象的抽象组件类的子类,实现在抽象组件内声明的方法,装饰器在其中添加额外的作用)方法) Decorator (抽象装饰类)抽象组件类的子类,用于向特定组件添加角色,但特定角色是在该子类中实现的。 维护对抽象构件对象的引用,调用用于装饰上一个构件对象的方法,并在其子类中扩展该方法以实现装饰目的。 ConcreteDecorator :在抽象装饰类的子类中,向构件添加新角色。 每个具体装饰类都定义了一个新行为,用于调用在抽象装饰类中定义的方法,并添加用于扩展对象行为的新方法。 三例装饰者模式实例如男女可视为装饰者,做饭洗衣服可视为装饰行为,是一种装饰者模式。 在我看来行为和行为者可以分离是最大的好处,毕竟容易扩张。 今天男人做饭,女人洗衣服也行,女人做饭男人洗衣服也行。 其次实现这一行为

首先是基准类的头文件。 因为男人和女人都是人,所以把人作为基准类的宣言定义了两个纯粹的虚函数,如下所示。 一个是人的属性,另一个是人的行为。

//所有基类的class people { public : virtualvoidpeopleattribute () )=0; //人的属性virtual void peopleBehavior ()=0; //人的行为; //被装饰者:男class man : public people { public : voidpeopleattribute (; void peopleBehavior (; (; void man :3360 people attribute () {cout 'Man ); } void man : people behavior () {我想要{cout 'Man ); //被装饰者:女性class woman 3360 public people { public : voidpeopleattribute (; void peopleBehavior (; (; void woman :人员属性((cout ' woman ) ); } void woman : people behavior () {我想要{cout 'Woman ); //装饰者行为基类class decorate : public people { public : decorate (people * people ) :m_people; void peopleAttribute (; void peopleBehavior (; 受保护的: people * m _ people; (; void decorate : people attribute ((m _ people-people attribute ) ); } void decorate : people behavior ((m _ people-people behavior ); (//装饰者行为料理classcook:publicdecorate ) public:cook(people*people ) :decorate(people ) }; void peopleAttribute (; void peopleBehavior (; (; void cook :3360 people attribute ((m _ people-people attribute ) ); cout '饿了' endl; } void cook : people behavior () {m_people-peopleBehavior ); cout '菜' endl; //装饰者行为洗涤class laundry :公共解码(public : laundry (people * people ) :解码) people ); void peopleAttribute (; void peopleBehavior (; (; void laundry : people attribute ((m _ people-people attribute ) ); cout '衣服脏了' endl; } void laundry : people behavior () {m_people-peopleBehavior ); cout '洗衣服' endl; }int main () {People * man=new Man ); People * woman=new Woman (; decorate*cook=newcook(man ); cook-peopleAttribute (; cook-peopleBehavior (; decorate * laundry=new laundry (woman ); laundry-peopleAttribute (; laundry-peopleBehavior (; 删除最大; 删除woman; delete cook; delete laundry; getchar (; 返回0; }结果图

四装饰模式的优缺点优点:

要扩展一个对象的功能,装饰模式比继承更灵活,类的数量不会急剧增加。 通过动态扩展对象的功能,可以实现各种各样的行为。 可以对一个对象进行多次装饰。 具体构件类和具体装饰类可以独立变化,用户可以根据需要添加新的具体构件类和具体装饰类,现有类库代码无需修改,符合“开合原则”。缺点:

使用装饰模式进行系统设计时,会产生很多小对象,产生大量小对象会占用更多的系统资源,影响程序的性能。 五装饰者模式和适配器模式的区别装饰者的目的是通过组合向某个对象添加新的功能,与适配器不同

适配器不会添加新功能,而是通过将一个对象的功能转换为另一个接口所需的功能来实现自适应功能。 此外,还有代理模式。

代理将某种公共处理抽象到代理层,通过代理使用对象,代理大量使用代理逻辑。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。