我所理解的設計模式(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++實現)——原型模式(Prototype Pattern)設計模式C++原型
- 我所理解的設計模式(C++實現)——建造者模式(Builder Pattern)設計模式C++UI
- 我所理解的設計模式(C++實現)——組合模式(Composite Pattern)設計模式C++
- 我所理解的設計模式(C++實現)——單例模式(Singleton Pattern)設計模式C++單例
- 我所理解的設計模式(C++實現)——介面卡模式(Adapter Pattern)設計模式C++APT
- 我所理解的設計模式(C++實現)——抽象工廠模式(Abstract Factory Pattern)設計模式C++抽象
- 我所理解的設計模式(C++實現)——工廠方法模式(Factory Method Pattern)設計模式C++
- 我所理解的設計模式(C++實現)——簡單工廠模式(Simple Factory Pattern)設計模式C++
- c++涉及模式 橋接模式(bridge Pattern)C++模式橋接
- C#設計模式-橋接模式(Bridge Pattern)C#設計模式橋接
- JAVA設計模式之 橋接模式【Bridge Pattern】Java設計模式橋接
- C#設計模式(8)——橋接模式(Bridge Pattern)C#設計模式橋接
- 設計模式 - Bridge 橋模式設計模式
- 設計模式 | 橋接模式(bridge)設計模式橋接
- 《設計模式》 - 6. 橋接模式( Bridge )設計模式橋接
- 設計模式的征途—8.橋接(Bridge)模式設計模式橋接
- C#設計模式系列:橋接模式(Bridge)C#設計模式橋接
- 設計模式--橋接模式Bridge(結構型)設計模式橋接
- 設計模式(五)橋接模式Bridge == Pointer To Implementation設計模式橋接
- Java橋模式(Bridge模式)Java模式
- C++設計模式——命令模式(command pattern)C++設計模式
- C++ 設計模式 裝飾模式(Decorator Pattern)C++設計模式
- 橋接模式(Bridge)橋接模式
- 設計模式----Bridge模式設計模式
- 我學設計模式 之 橋接模式設計模式橋接
- 橋接模式(c++實現)橋接模式C++
- (精華)2020年8月28日 二十三種設計模式(七)-橋接模式(Bridge Pattern)設計模式橋接
- 設計模式學習-使用go實現橋接模式設計模式Go橋接
- 設計模式——單例模式C++實現設計模式單例C++
- C++設計模式——職責鏈模式( Chain of Responsibility Pattern)C++設計模式AI
- 設計模式-策略模式(strategy pattern)設計模式
- 設計模式-橋接模式設計模式橋接
- 設計模式:橋接模式設計模式橋接
- 設計模式之策略模式和狀態模式(strategy pattern & state pattern)設計模式
- 設計模式--裝飾模式(Decorator Pattern)設計模式
- 設計模式之代理模式(proxy pattern)設計模式
- 設計模式-裝飾模式(Decorator Pattern)設計模式
- 設計模式--建造者模式(Builder Pattern)設計模式UI