策略模式:設計模式。一種在執行時更改演算法行為的方式。
多型:語言機制。通過基類的指標或者引用,在執行時動態呼叫實際繫結物件函式的行為。
多型是設計模式的基礎,多型是框架的基礎。
c++ 中實現策略模式有兩種方法:一是多型;一是模板。
多型實現策略模式
// 多型實現策略模式
#include
// 幾何操作演算法集
class
geometrystrategy
;// 點
class
pointstrategy
:public geometrystrategy
pointstrategy
(const pointstrategy &p)
int x()
const
int y()
const
virtual void
offset
(int x, int y)
void
offset
(pointstrategy pt)
private
: int m_x;
int m_y;};
// 矩形
class
rectanglestrategy
:public geometrystrategy
virtual void
offset
(int x, int y) override
private
: pointstrategy m_min;
pointstrategy m_max;};
// 圓
class
circlestrategy
:public geometrystrategy
virtual void
offset
(int x, int y) override
private
: pointstrategy m_center;
int m_r;};
// 定義乙個上下文
class
context
void
offsetgeometry
(pointstrategy pt)
private
: geometrystrategy *m_geometry;};
int main()
類模板實現策略模式
(這裡圖方便就直接拿上面的例子進行修改,可能不是很恰當)
// 類模板實現策略模式
// 點
class
pointstrategy
pointstrategy
(const pointstrategy &point)
int x()
const
int y()
const
void
offset
(int x, int y)
private
: int m_x;
int m_y;};
// 矩形
class
rectanglestrategy
void
offset
(int x, int y)
private
: pointstrategy m_min;
pointstrategy m_max;};
// 圓
class
circlestrategy
void
offset
(int x, int y)
private
: pointstrategy m_center;
int m_r;};
// 定義了乙個上下文
template<
class
strategy
>
class
context
void
offsetgeometry
(pointstrategy pt)
private
: strategy strtgy;};
int main()
C語言模式實現C 繼承和多型
這個問題主要考察的是c和c 的區別,以及c 中繼承和多型的概念。c和c 的區別 c語言是面向過程的語言,而c 是物件導向的過程。什麼是物件導向和面向過程?面向過程就是分析解決問題的步驟,然後用函式把這些步驟一步一步的進行實現,在使用的時候進行一一呼叫就行了,注重的是對於過程的分析。物件導向則是把構成...
C語言模式實現C 繼承和多型
c實現乙個struct a和struct b各包含乙個int成員a和b,要求達到b繼承了a的效果,也就是b裡面包含乙個a。並且能達到多型的效果,也就是乙個a p指向a調的是a的函式,指向b呼叫的是b的函式。1.繼承 1 c 的繼承 在c 中,可以用乙個類 子類 去繼承另乙個類 父類 子類可以得到父類...
c 設計模式 策略模式
策略模式,看完策略模式最大的感受就是將所有的演算法封裝起來,讓它們之間可以相互替換,這個模式讓演算法的變化不會影響到使用者。我寫的例子還是之前的那個簡易計算器,策略模式可以和簡單工廠模式結合,在客戶端中只需認識乙個concent類,將所有的演算法物件建立以及演算法的使用全部封裝在乙個類中,即conc...