策略模式和C 多型

2021-10-19 18:46:26 字數 2220 閱讀 8740

策略模式:設計模式。一種在執行時更改演算法行為的方式。

多型:語言機制。通過基類的指標或者引用,在執行時動態呼叫實際繫結物件函式的行為。

多型是設計模式的基礎,多型是框架的基礎。

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...