//分离抽象部分和实现部分,使得各自都可以独立变化
class WindowImpl;
class Window
{
public:
virtual ~Window() {}
virtual void Create() { }
void OnPaint();
protected:
Window(WindowImpl* pImpl) : m_pWindowImpl(pImpl)
{
}
protected:
WindowImpl* m_pWindowImpl;
};
class WindowImpl
{
public:
virtual void DrawNCArea() = 0;
virtual void DrawClientArea() = 0;
};
class LinuxWindowImpl : public WindowImpl
{
public:
virtual void DrawNCArea()
{
cout<<"linux 下是这样画非客户区的"<<endl;
}
virtual void DrawClientArea()
{
cout<<"linux 下是这样画客户区的"<<endl;
}
};
class MacOSWindowImpl : public WindowImpl
{
public:
virtual void DrawNCArea()
{
cout<<"mac os下是这样画非客户区的"<<endl;
}
virtual void DrawClientArea()
{
cout<<"mac os下是这样画客户区的"<<endl;
}
};
class DialogWindow : public Window
{
public:
DialogWindow(WindowImpl* pImpl) : Window(pImpl) { }
virtual ~DialogWindow() {}
virtual void Create()
{
cout<<"创建一个模态对话框"<<endl;
}
};
class FrameWindow : public Window
{
public:
FrameWindow(WindowImpl* pImpl) : Window(pImpl) {}
virtual ~FrameWindow() {}
virtual void Create()
{
cout<<"创建一个非模态对话框"<<endl;
}
};
void Window::OnPaint()
{
m_pWindowImpl->DrawClientArea();
m_pWindowImpl->DrawNCArea();
}
int _tmain(int argc, _TCHAR* argv[])
{
LinuxWindowImpl impl;
DialogWindow dlg(&impl);
dlg.Create();
dlg.OnPaint();
system("pause");
return 0;
}
【24种设计模式】桥接(bridge)模式
最新推荐文章于 2024-09-21 22:44:43 发布