Bridge方式C++代码

Bridge模式C++代码

H 文件

#ifndef Rectangle_h
#define Rectangle_h

class Drawing
{
    public:
		virtual void drawLine() = 0;
		virtual void drawCircle() = 0;
};

class V1Drawing:public Drawing
{
    public:
		void drawLine();
		void drawCircle();
};

class V2Drawing:public Drawing
{
    public:
		void drawLine();
		void drawCircle();	
};

class Shape
{
    public:
		Shape(Drawing* cDrawing)
		{
            m_pDrawing = cDrawing;
		}
		virtual void draw()=0;
	protected:
		void drawLine();
		void drawCircle();

	private:
		Drawing* m_pDrawing;
};

class Rectangle: public Shape
{
    public:
		Rectangle(Drawing* pDrawing):Shape(pDrawing){}
		void draw();
};

class Circle: public Shape
{
    public:
		Circle(Drawing* pDrawing):Shape(pDrawing){}
		void draw();
};

#endif


C文件代码

#include "Rectangle.h"
#include "iostream"

using namespace std;

void V1Drawing::drawLine()
{
    cout<<"V1Drawing::void drawLine()"<<endl;
}

void V1Drawing::drawCircle()
{
    cout<<"V1Drawing::void drawCircle()"<<endl;    
}

void V2Drawing::drawLine()
{
    cout<<"V2Drawing::void drawLine()"<<endl;  
}

void V2Drawing::drawCircle()
{
    cout<<"V2Drawing::void drawLine()"<<endl;      
}

void Shape::drawLine()
{
    m_pDrawing->drawLine();
}
void Shape::drawCircle()
{
    m_pDrawing->drawCircle();
}
void Rectangle::draw()
{
    drawLine();
}

void Circle::draw()
{
    drawCircle();
}



Main 文件代码


#include "iostream"
#include "Rectangle.h"

using namespace std;

void main(void)
{
  Drawing* pV1Drawing = new V1Drawing;
  Drawing* pV2Drawing = new V2Drawing;  

  Rectangle cRectangle1(pV1Drawing);
  cRectangle1.draw();
  Rectangle cRectangle2(pV2Drawing);
  cRectangle2.draw();
  Circle cCircle1(pV1Drawing);
  cCircle1.draw();
  Circle cCircle2(pV2Drawing);
  cCircle2.draw();

  delete pV1Drawing;
  delete pV2Drawing;
}