zoukankan      html  css  js  c++  java
  • 设计模式-Decorator(结构型模式) 用于通过 组合 的方式 给定义的类 添加新的操作,这里不用 继承 的原因是 增加了系统的复杂性,继承使深度加深。

    以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码

    //Decorator.h

    #pragma once
    
    class Component
    {
    public:
        virtual ~Component();
        virtual void Operation();
    protected:
        Component();
    };
    
    class ConcreateComponent :public Component
    {
    public:
        virtual ~ConcreateComponent();
        ConcreateComponent();
        void Operation();
    };
    
    class Decorator :public Component
    {
    public:
        Decorator(Component* com);
        virtual ~Decorator();
        void Operation();
    protected:
        Component* _com;
    private:
    };
    
    class ConcreateDecorator :public Decorator
    {
    public:
        ConcreateDecorator(Component* com);
        virtual ~ConcreateDecorator();
        void Operation();
        void addBehavor();
    protected:
    private:
    };

    //Decorator.cpp

    #include"Decorator.h"
    #include<iostream>
    
    Component::Component(){}
    Component::~Component(){}
    void Component::Operation(){}
    
    ConcreateComponent::ConcreateComponent(){}
    ConcreateComponent::~ConcreateComponent(){}
    void ConcreateComponent::Operation()
    {
        std::cout << "Concreate Component Operation..." << std::endl;
    }
    
    Decorator::Decorator(Component* com)
    {
        this->_com = com;
    }
    Decorator::~Decorator()
    {
        delete _com;
    }
    void Decorator::Operation(){}
    
    ConcreateDecorator::ConcreateDecorator(Component* com):Decorator(com){}
    ConcreateDecorator::~ConcreateDecorator(){}
    void ConcreateDecorator::addBehavor()
    {
        std::cout << "CreateDecorator::AddedBehavior.." << std::endl;
    }
    void ConcreateDecorator::Operation()
    {
        _com->Operation();
        this->addBehavor();
    }

    //main.cpp

    #include"Decorator.h"
    #include<iostream>
    #include<string>
    
    int main(int args, char*argv)
    {
        Component* com = new ConcreateComponent();
        Decorator*dec = new ConcreateDecorator(com);
        dec->Operation();
        delete dec;
        getchar();
        return 0;
    }
  • 相关阅读:
    TCD产品技术参考资料
    html中显示指数、底数
    睡眠分期眼动图
    睡眠脑电图波形一览图
    α波与睡眠梭形波的判读
    Spring Cloud Alibaba架构实战
    我们都是IT人,所以,注定了我们很像。
    技术专栏优惠购买,一页式搞定
    微服务开发实战(spring-cloud/spring-cloud-alibaba/dubbo),一个案例,手把手带你入门
    程序员如何有效阅读
  • 原文地址:https://www.cnblogs.com/fourmi/p/12077306.html
Copyright © 2011-2022 走看看