平台建站,网络域名解析错误,兰州有什么互联网公司,西部虚拟主机网站后台不能访问UML 聚合(Aggregation)关系#xff1a;大雁和雁群#xff0c;上图中空心菱形箭头表示聚合关系组合(Composition)关系#xff1a;大雁和翅膀 #xff0c;实心菱形箭头表示组合(Composition)关系
测试代码
#include iostream
#include stdio.h
#include 大雁和雁群上图中空心菱形箭头表示聚合关系组合(Composition)关系大雁和翅膀 实心菱形箭头表示组合(Composition)关系
测试代码
#include iostream
#include stdio.h
#include mutex//锁头文件using namespace std;class Component{
public:virtual void Operation() 0;virtual ~Component(){}
};
class ConcreteComponent:public Component
{
public:void Operation(){cout ConcreteComponent endl;}
};class Decorator:public Component{
protected:Component *component nullptr;
public:void SetComponent(Component *_component){this-component _component;}void Operation(){if(component ! nullptr){component-Operation();}}
};
class ConcreteDecoratorA:public Decorator
{
private:string addedState;
public:void Operation(){Decorator::Operation();addedState new State;cout 具体装饰对象A的操作 endl;}
};class ConcreteDecoratorB:public Decorator
{
public:void Operation(){Decorator::Operation();AddedBehavior();cout 具体装饰对象B的操作 endl;}
private:void AddedBehavior(){cout AddedBehavior endl;}
};
int main(void)
{ConcreteComponent *c new ConcreteComponent();ConcreteDecoratorA *d1 new ConcreteDecoratorA();ConcreteDecoratorB *d2 new ConcreteDecoratorB();d1-SetComponent(c);d2-SetComponent(d1);d2-Operation();cout --endl-- endl;return 0;
}
输出
ConcreteComponent
具体装饰对象A的操作
AddedBehavior
具体装饰对象B的操作
--endl--装饰模式是利用SetComponent来对对象进行包装的。这样每个装饰对象的实现就和如何使用这个对象分离开了每个装饰对象只关心自己的功能不需要关心如何被添加到对象链当中 装饰模式变身 如果只有一个ConcreteComponent类而没有抽象的Component类那么Decorator类可以是ConcreteComponent的一个子类。同样道理如果只有一个ConcreteDecorator类那么就没有必要建立一个单独的Decorator类而可以把Decorator和ConcreteDecorator的责任合并成一个类 根据这段文字的描述UML结构图变身后的形态 C改写后的UML图和代码
代码
#include iostream
#include stdio.h
#include mutex//锁头文件using namespace std;//“Person”类ConcreteComponent
class Person{
public:Person(){}Person(string _name):name(_name){}virtual void Show(){cout 装扮的 this-name endl;}
private:string name;
};
//服饰类Decorator
class Finery:public Person
{
public:Person *component nullptr;void Decorate(Person *_component){this-component _component;}virtual void Show(){if(component ! nullptr){component-Show();}}
};
class fengyi:public Finery
{
public:virtual void Show(){cout 风衣 endl;Finery::Show();}
};class yundongxie:public Finery
{
public:virtual void Show(){cout 运动鞋 endl;Finery::Show();}
};
class mojing:public Finery
{
public:void Show(){cout 墨镜 endl;Finery::Show();}
};
class kouzhao:public Finery
{
public:void Show(){cout 口罩 endl;Finery::Show();}
};
class xifu:public Finery
{
public:void Show(){cout 西服 endl;Finery::Show();}
};
int main(void)
{cout 装扮1 endl;Person *p1 new Person(lkmao);fengyi *fy new fengyi();yundongxie *ydx new yundongxie();fy-Decorate(p1);ydx-Decorate(fy);ydx-Show();cout endl 装扮2 endl;Person *p2 new Person(laoliu);mojing *mj new mojing();kouzhao *kz new kouzhao();xifu *xf new xifu();mj-Decorate(p2);kz-Decorate(mj);xf-Decorate(kz);xf-Show();cout --endl-- endl;return 0;
} 输出
装扮1
运动鞋
风衣
装扮的lkmao装扮2
西服
口罩
墨镜
装扮的laoliu
--endl--参考https://blog.csdn.net/yueni_zhao/article/details/128946954