普洱市住房和城乡建设局信息公开网站,百度收录批量提交入口,网站建设挣钱 知乎,哪些网站可以做外贸装饰模式#xff1a;动态地给一个对象添加一些额外的职责。就增加功能来说#xff0c;装饰模式相比生成子类更为灵活。有时我们希望给某个对象而不是整个类添加一些功能。比如有一个手机#xff0c;允许你为手机添加特性#xff0c;比如增加挂件、屏幕贴膜等。一种灵活的设… 装饰模式动态地给一个对象添加一些额外的职责。就增加功能来说装饰模式相比生成子类更为灵活。有时我们希望给某个对象而不是整个类添加一些功能。比如有一个手机允许你为手机添加特性比如增加挂件、屏幕贴膜等。一种灵活的设计方式是将手机嵌入到另一对象中由这个对象完成特性的添加我们称这个嵌入的对象为装饰。这个装饰与它所装饰的组件接口一致因此它对使用该组件的客户透明。下面给出装饰模式的UML图。 在这种设计中手机的装饰功能被独立出来可以单独发展进而简化了具体手机类的设计。下面给出Phone类的实现 [cpp] view plaincopyprint? //公共抽象类 class Phone { public: Phone() {} virtual ~Phone() {} virtual void ShowDecorate() {} }; 具体的手机类的定义 [cpp] view plaincopyprint? //具体的手机类 class iPhone : public Phone { private: string m_name; //手机名称 public: iPhone(string name): m_name(name){} ~iPhone() {} void ShowDecorate() { coutm_name的装饰endl;} }; //具体的手机类 class NokiaPhone : public Phone { private: string m_name; public: NokiaPhone(string name): m_name(name){} ~NokiaPhone() {} void ShowDecorate() { coutm_name的装饰endl;} }; 装饰类的实现 [cpp] view plaincopyprint? //装饰类 class DecoratorPhone : public Phone { private: Phone *m_phone; //要装饰的手机 public: DecoratorPhone(Phone *phone): m_phone(phone) {} virtual void ShowDecorate() { m_phone-ShowDecorate(); } }; //具体的装饰类 class DecoratorPhoneA : public DecoratorPhone { public: DecoratorPhoneA(Phone *phone) : DecoratorPhone(phone) {} void ShowDecorate() { DecoratorPhone::ShowDecorate(); AddDecorate(); } private: void AddDecorate() { cout增加挂件endl; } //增加的装饰 }; //具体的装饰类 class DecoratorPhoneB : public DecoratorPhone { public: DecoratorPhoneB(Phone *phone) : DecoratorPhone(phone) {} void ShowDecorate() { DecoratorPhone::ShowDecorate(); AddDecorate(); } private: void AddDecorate() { cout屏幕贴膜endl; } //增加的装饰 }; 客户使用方式 [cpp] view plaincopyprint? int main() { Phone *iphone new NokiaPhone(6300); Phone *dpa new DecoratorPhoneA(iphone); //装饰增加挂件 Phone *dpb new DecoratorPhoneB(dpa); //装饰屏幕贴膜 dpb-ShowDecorate(); delete dpa; delete dpb; delete iphone; return 0; } 装饰模式提供了更加灵活的向对象添加职责的方式。可以用添加和分离的方法用装饰在运行时刻增加和删除职责。装饰模式提供了一种“即用即付”的方 法来添加职责。它并不试图在一个复杂的可定制的类中支持所有可预见的特征相反你可以定义一个简单的类并且用装饰类给它逐渐地添加功能。可以从简单的部件组合出复杂的功能。[DP] 在本文的例子中我们定义了两个具体的手机类iPhone类和NokiaPhone类通过单独的装饰类为它们添加特性从而组合出复杂的功能。 本人享有博客文章的版权转载请标明出处 http://blog.csdn.net/wuzhekai1985