bridge模式bridge模式

/*
桥接模式
多维变化适合用
一维变化继承就行了
*/
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();
*/

}

bridge模式

相关文章: