zoukankan      html  css  js  c++  java
  • 设计模式之装饰模式

     #include "stdafx.h"
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    /*************************************
    装饰模式
    *************************************/
    
    class Person {
    public:
    	Person(){}
    	Person(string strName) :name_(strName) {}
    	virtual void Show() {
    		cout << " 装饰的 "<< name_ << endl;
    	}
    private:
    	Person(const Person& p);
    	string name_;
    };
    
    /*
    抽象 装饰
    */
    
    class Finery :public Person{
    public:
    	Finery():p_(NULL){}
    	void Decorate(Person* p){
    		p_ = p; 
    	}
    
    	void Show() {
    		if (p_) {
    			p_->Show();
    		}
    	}
    protected:
    	Person* p_;
    };
    /*
    具体装饰
    */
    class TShirts :public Finery {
    public:
    	void Show() {
    		cout << "T恤衫" << " ";
    		Finery::Show();
    	}
    };
    
    /*
    具体装饰
    */
    class BigTrousers :public Finery {
    public:
    	void Show() {
    		cout << "大垮裤" << " ";
    		Finery::Show();
    	}
    };
    
    class LeatherShoes : public Finery{
    public:
    	void Show()
    	{
    		std::cout << "皮鞋" << " ";
    		Finery::Show();
    	}
    };
    
    
    int main()
    {
    	Person* p = new Person("行人");
    	TShirts* pts = new TShirts();
    	BigTrousers* pbt = new BigTrousers();
    	LeatherShoes* pls = new LeatherShoes();
    	pts->Decorate(p);
    	pbt->Decorate(pts);
    	pls->Decorate(pbt);
    	pls->Show();
    return 0; }

    为一个类添加额外的功能装饰

    参考 大话设计模式

  • 相关阅读:
    vue 微信底部导航开始就隐藏
    复制内容到剪切板 兼容大部分手机浏览器
    复制内容到剪切板
    页面滚动到顶部 也可实现或底部或中部
    js判断当前是移动端还是ios端
    判断是否是微信浏览器打开
    vue 获取元素高度
    内容超出隐藏
    uni-app 动态修改标题栏按钮名称
    Docker 常用应用
  • 原文地址:https://www.cnblogs.com/itdef/p/5021457.html
Copyright © 2011-2022 走看看