美文网首页文字欲
最常用的设计模式---装饰者模式(C++实现)

最常用的设计模式---装饰者模式(C++实现)

作者: 架构师Javaspring | 来源:发表于2019-06-18 11:28 被阅读0次

上一篇说了适配器模式,这一篇接着学习装饰者模式。

    想要扩展功能,装饰者提供了有别于继承的另外一种选择。

     装饰者模式主要实现的功能是动态的给某一个类添加一些额外的功能,它是一个锦上添花者。想要扩展功能,装饰者提供了有别于继承的另外一种选择。设计模式的原则是多用组合少用继承。

uml 图:

特点:

     1. 装饰者和被装饰者拥有相同的超类型(可能是抽象类也可能是接口)

     2. 可以用多个装饰类来包装一个对象,装饰类可以包装装饰类或被装饰对象

     3. 因为装饰者和被装饰者拥有相同的抽象类型,因此在任何需要原始对象(被包装)的场合,都可以用装饰过的对象来替代它。

     4. 装饰者可以在被装饰者的行为之前或之后,加上自己的附加行为,以达到特殊目的

      5. 因为对象可以在任何的时候被装饰,所以可以在运行时动态地、不限量地用你喜欢的装饰者来装饰对象

案例分析

      假如你老婆喜欢化妆,她每天早上照镜子着镜子都化妆,化妆的时候要涂口红,画睫毛,抹香水。老婆化妆的这个过程便是一个典型的装饰者模式,而口红,眼线笔,香水,显然就是装饰品。

首先是爱照镜子的女人:

class IWomen

{

public:

virtual void lookIntoTheMirror() = 0;

};

然后老婆是个爱照镜子的喜欢打扮的女人(具体需要装饰对象)

class Wife : public IWomen

{

public:

void lookIntoTheMirror()

{

cout<<"镜子中的老婆 "<<endl;

}

};

需要一个化妆的女人(装饰品的抽象基类)

class DecoratorWomen : public IWomen

{

public:

DecoratorWomen(IWomen* woman)

:m_women(woman)

{

}

void lookIntoTheMirror()

{

m_women->lookIntoTheMirror();

makeUp();

}

virtual void makeUp() = 0; //化妆

protected:

IWomen* m_women;

};

下面是具体3种用于化妆的化妆品: 口红,睫毛膏,香水

class Lipstick : public DecoratorWomen

{

public:

Lipstick(IWomen* woman):DecoratorWomen(woman){};

void makeUp()

{

cout<<"  有火红的嘴唇!";

}

};

class Mascara : public DecoratorWomen

{

public:

Mascara(IWomen* woman):DecoratorWomen(woman){};

void makeUp()

{

cout<<"  有黑黑的睫毛!";

}

};

class Perfume : public DecoratorWomen

{

public:

Perfume(IWomen* woman):DecoratorWomen(woman){};

void makeUp()

{

cout<<"  有香奈儿的味道!";

}

};

客户端,老婆照镜子

IWomen* myWife = new Wife();

Lipstick* lips = new Lipstick(myWife);

Mascara* mas = new Mascara(lips);

Perfume* per = new Perfume(mas);

myWife = per;

myWife->lookIntoTheMirror();

        //释放各种资源...

适配器模式和装饰者模式的区别:

    适配器将一个对象包装起来以改变其接口;装饰者将一个对象包装起来以增强新的行为和责任;而外观将一群对象包装起来以简化其接口。要注意装饰着模式的两个抽象类,一个是Compent, 还有一个是Decorator。

    最后送福利了,加群即可获取 群号:798891710 即可获取Java工程化、高性能及分布式、高性能、高架构、性能调优、Spring、MyBatis、Netty源码分析等多个知识点高级进阶干货的相关视频资料,等你来拿

相关文章

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 最常用的设计模式---装饰者模式(C++实现)

    上一篇说了适配器模式,这一篇接着学习装饰者模式。 想要扩展功能,装饰者提供了有别于继承的另外一种选择。 装...

  • 设计模式~装饰器-[Android_YangKe]

    装饰器模式: 装饰器模式(Decorator Pattern)又名装饰者,是项目中比较常用的一种设计模式(结构型模...

  • 03-设计模式(包括KVO/KVC)

    iOS开发常用设计模式? 详细blog链接 MVC模式 MVVM模式 代理模式 单例模式 工厂模式 装饰者模式 观...

  • js代码题

    js对象的深度克隆 js数组去重 js常用设计模式的实现思路,单例,工厂,代理,装饰,观察者模式等

  • python装饰器的使用

    1. 装饰者模式 装饰者模式是常用的软件设计模式之一。通过此设计模式,我们能够在不修改任何底层代码情况下,给已有对...

  • C++常用设计模式

    C++常用设计模式。

  • 10.9-全栈Java笔记:装饰器模式构建IO流体系

    装饰器模式 装饰器模式是GOF23种设计模式中较为常用的一种模式。它可以实现对原有类的包装和装饰,使新的类具有更强...

  • 10.9-全栈Java笔记:装饰器模式构建IO流体系

    装饰器模式 装饰器模式是GOF23种设计模式中较为常用的一种模式。它可以实现对原有类的包装和装饰,使新的类具有更强...

  • 设计模式

    常用的设计模式:单例模式,工厂模式,观察者模式,代理模式,其他的我使用不多。单例模式最常见也最简单分为几种实现:懒...

网友评论

    本文标题:最常用的设计模式---装饰者模式(C++实现)

    本文链接:https://www.haomeiwen.com/subject/dogxqctx.html