/*
桥接模式
多维变化适合用
一维变化继承就行了
*/
class ImpShape
{
public:
ImpShape(void) {};
virtual ~ImpShape(void) {};
public:
virtual void draw()=0;
};
class ImpPdf : public ImpShape
{
public:
ImpPdf(void) {};
~ImpPdf(void) {};
virtual void draw();
};
void ImpPdf::draw()
{
std::cout << "ImpPdf::draw\n";
}
class ImpDoc : public ImpShape
{
public:
ImpDoc(void) {};
~ImpDoc(void) {};
virtual void draw();
};
void ImpDoc::draw()
{
std::cout << "ImpDoc::draw\n";
}
class IShape
{
public:
IShape(void) {};
virtual ~IShape(void) {};
virtual void getName()=0;
void paint();
public:
ImpShape *implementor;
};
void IShape::paint()
{
getName();
implementor->draw();
}
class CRect :public IShape
{
public:
CRect() {};
~CRect() {};
virtual void getName();
};
void CRect::getName()
{
std::cout << "i am rect\n";
}
class CCircle :public IShape
{
public:
CCircle() {};
~CCircle() {};
virtual void getName();
};
void CCircle::getName()
{
std::cout << "i am circle\n";
}
int main()
{
/*
桥接模式
既满足了 画什么图形 shape继承实现shape 抽象的 继承
又实现了 在什么上面画 impdoc imppdf === impshape 实现 不同的实现 不依赖继承 独立的
抽象部分和实现部分分离,使他们都能够独立的变化
解耦抽象和它的实现 以便二者可以独立的变化
既有继承,又有不同继承的组合 组件的组合
CRect* r = new CRect();
r->implementor = new ImpPdf();
r->paint();
CCircle* c = new CCircle();
c->implementor = new ImpDoc();
c->paint();
*/
}