一.代理模式
class Subject
{
public:
virtual void sailbook() = 0;
};
class RealSubjectBook {
public:
virtual void sailbook() {
cout << "实体店卖书" << endl;
}
};
class dangdang :public Subject
{
public:
virtual void sailbook() {
RealSubjectBook *rsb = new RealSubjectBook;
discount();
rsb->sailbook();
//cout << "网店卖书" << endl;
}
void discount() {
cout << "打折" << endl;
}
private:
Subject *m_subject;
};
void main()
{
Subject *s = new dangdang;
s->sailbook();
delete s;
system("pause");
}
代理模式本质上是A中包含一个B类,A和B实现一个协议;这个设计模式理解起来很简单
二.装饰模式
对一个类进行功能性增强:
1.可以直接更改该类的代码;
2.可以通过新建一个类继承该类,再对新建的类进行功能增强;
3.可以通过组合的方式,就是新建一个类,该类里面包含要修改类的对象(装饰模式就是对该方法的增强)。
装饰者模式动态的给一个对象增加额外的职责,就增加功能来说,此模式更加灵活。
class Car {
public:
virtual void show() = 0;
};
class Runcar :public Car
{
virtual void show()
{
cout << "车可以跑" << endl;
}
};
class SwimCardecrator:public Car {
private:
Car *m_car;
public:
SwimCardecrator(Car *car)
{
this->m_car = car;
}
virtual void show()
{
m_car->show();
cout << "车可以游" << endl;
}
};
class FlyCardecrator :public Car {
private:
Car *m_car;
public:
FlyCardecrator(Car *car)
{
this->m_car = car;
}
virtual void show()
{
m_car->show();
cout << "车可以飞" << endl;
}
};
void main()
{
Car *runcar = new Runcar;
runcar->show();
SwimCardecrator *addswimcar = new SwimCardecrator(runcar);
FlyCardecrator *addflycar = new FlyCardecrator(addswimcar);
addflycar->show();
delete addflycar;
delete addswimcar;
delete runcar;
system("pause");
}