我所理解的設計模式(C++實現)——橋模式(Bridge Pattern)
橋模式,其作用就是讓抽象與實現相分離,讓兩者都能夠各自變化。
舉例來說吧,畫圖,我可以畫矩形,圓,三角形等等,在哪裡畫呢?我可以在pdf上畫,也可以在doc上面畫。畫什麼圖和在哪裡畫都是可以獨立變化的,此種情況就比較適合用橋模式。就是說設計中有超過一維的變化我們就可以用橋模式。如果只有一維在變化,那麼我們用繼承就可以圓滿的解決問題。
我的圖形定義:
#pragma once
#include<vector>
#include"ImpShape.h"
class IShape
{
public:
IShape(void);
virtual ~IShape(void);
virtual std::vector<Point> getDrawPoints();
void paint();
public:
ImpShape *implementor;
};
其他圖形都繼承之:
#pragma once
#include "ishape.h"
class CRectangle :
public IShape
{
public:
CRectangle(void);
~CRectangle(void);
};
#pragma once
#include "ishape.h"
class CCircle :
public IShape
{
public:
CCircle(void);
~CCircle(void);
};
那麼在怎麼畫這個問題上,該怎麼實現呢?我先定義一個shape的實現類:
#pragma once
#include<vector>
class ImpShape
{
public:
ImpShape(void);
virtual ~ImpShape(void);
public:
virtual void draw(std::vector<Point>&);
};
那麼讓pdf和doc的實現類都繼承自ImpShape:
#pragma once
#include "impshape.h"
class ImpPdf :
public ImpShape
{
public:
ImpPdf(void);
~ImpPdf(void);
};
#pragma once
#include "impshape.h"
class ImpDoc :
public ImpShape
{
public:
ImpDoc(void);
~ImpDoc(void);
};
那ImpPdf和ImpDoc必須繼承且重寫ImpShape的draw函式。
我們的抽象和實現都分別實現好了,那兩者如何聯絡,如何使用的?
- 關於聯絡,細心的你也許已經發現,IShape裡面包含一個ImpShape的指標,包含!對。因為ImpShape是實現IShape的,這裡用包含,我們可以在IShape的其他函式裡方便的呼叫。
#include "StdAfx.h" #include "IShape.h" IShape::IShape(void) { } IShape::~IShape(void) { } void IShape::paint() { std::vector<Point> vpoints = getDrawPoints(); this->implementor->draw(vpoints); }
- 關於使用,很簡單:
IShape *item = new CCircle();
item->implementor = new ImpPdf();
item->paint();
item = new CRectangle();
item->implementor = new ImpDoc();
item->paint();
這樣既滿足了畫什麼圖形的變化,也滿足了在什麼上畫的問題,他們之間的類圖如下:
LCL_data原創於CSDN.Net[http://blog.csdn.net/lcl_data/article/details/8710134]
相關文章
- C#設計模式-橋接模式(Bridge Pattern)C#設計模式橋接
- 設計模式 - Bridge 橋模式設計模式
- 設計模式 | 橋接模式(bridge)設計模式橋接
- 《設計模式》 - 6. 橋接模式( Bridge )設計模式橋接
- Java橋模式(Bridge模式)Java模式
- C++設計模式——命令模式(command pattern)C++設計模式
- (精華)2020年8月28日 二十三種設計模式(七)-橋接模式(Bridge Pattern)設計模式橋接
- 橋接模式(c++實現)橋接模式C++
- C++設計模式——職責鏈模式( Chain of Responsibility Pattern)C++設計模式AI
- 設計模式學習-使用go實現橋接模式設計模式Go橋接
- 設計模式之策略模式和狀態模式(strategy pattern & state pattern)設計模式
- 設計模式-橋接模式設計模式橋接
- 設計模式--建造者模式(Builder Pattern)設計模式UI
- 設計模式--原型模式(Prototype Pattern)設計模式原型
- 設計模式--裝飾模式(Decorator Pattern)設計模式
- 設計模式-狀態模式(State Pattern)設計模式
- 設計模式-裝飾模式(Decorator Pattern)設計模式
- 設計模式之代理模式(proxy pattern)設計模式
- 設計模式實戰 - 抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- 設計模式實戰 – 抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- Java設計模式-橋接模式Java設計模式橋接
- 小白設計模式:橋接模式設計模式橋接
- 設計模式之【橋接模式】設計模式橋接
- 設計模式(八)——橋接模式設計模式橋接
- 設計模式之橋接模式設計模式橋接
- C#設計模式——代理模式(Proxy Pattern)C#設計模式
- 常用設計模式-單例模式(Singleton pattern)設計模式單例
- [Design Pattern With Go]設計模式-工廠模式Go設計模式
- 設計模式之單例模式(Singleton Pattern)設計模式單例
- 4/24 設計模式之命令設計模式 Command Pattern設計模式
- 1/24 設計模式之策略設計模式 Strategy Pattern設計模式
- 設計模式——原型模式(C++)——演算法實現設計模式原型C++演算法
- 使用C# (.NET Core) 實現命令設計模式 (Command Pattern)C#設計模式
- 設計模式十: 生成器模式(Builder Pattern)設計模式UI
- 設計模式--抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- 設計模式--工廠方法模式(Factory Method Pattern)設計模式
- 重識設計模式-建造者模式(Builder Pattern)設計模式UI
- C#設計模式-建造者模式(Builder Pattern)C#設計模式UI
- C#設計模式-原型模式(Prototype Pattern)C#設計模式原型