• 设计模式--装饰模式C++实现


    装饰模式C++实现

    1定义

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

    2类图

    3实现

    //构件

    class Component

    {

    protected:

      Component();

    public:

       virtual void operate() = 0;

      virtual ~Component() = 0;

    };

    class ConcreteComponent: public Component

    {

    public:

      ConcreteComponent();

      ~ConcreteComponent();

      void operate()

      {

        cout << " do Something..."<<endl;

      }

    };

    //注,这里的继承很关键,因为客户端只是知道Component,而不知Decorator,这样做提供了多态表示的机会

    class Decorator:public Component

    {

    private:

      Component *_com;

    public:

      Decorator(Component* com)

        :_com(com)

      {} 

      void operate()

      {

         _com->operate();

      }

    };

    class ConcreteDecorator:public Decorator

    {

    public:

      ConcreteDecorator(Component *com) 

        :Decorator(com)

      {}

    private:

      void method1()

      {

        cout << "装饰1"<<endl;

      }

      void operate()

      {

        method1();

        Decorator::operate();

      }

    };

    void Test

    {

      component *com = new ConcreteComponent();

      com = new ConcreteDecorator(com);

      com.operate();

    };

    4应用

    ①优点

    装饰类和被装饰类可以独立发展,不会有耦合关系。Decorator是从外部扩展功能,而不知道具体的构建

    装饰模式是继承关系的一个替代方案。实现的是is-a关系(注解继承)

    可以动态的扩展一个类的功能

    ②缺点

    多层装饰会有无限剥离的问题,影响效率,性能,工作量大

    5使用场景

    需要扩展一个类的功能,附加功能

    需要动态给一个对象增加功能,且可以再动态撤销

    需要为一批兄弟类进行改装或加装功能,首选装饰功能

    6辨析

    继承时静态增加功能

    装饰是动态增加功能

  • 相关阅读:
    DS博客作业05--查找
    DS博客作业04--图
    数据结构-栈,队列
    我の第六篇博客
    我の第五篇博客
    我の第四篇博客
    我の第三篇博客
    我の第二篇博客
    Java 购物车大作业01
    有理数类的设计
  • 原文地址:https://www.cnblogs.com/lang5230/p/5328304.html
Copyright © 2020-2023  润新知