程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 我的Design Pattern之旅[1]:Strategy Pattern (OO)(1)

我的Design Pattern之旅[1]:Strategy Pattern (OO)(1)

編輯:關於C語言

Abstract

Head First Design Patterns是用strategy pattern當作第一個范例,而陳俊杉教授也是用strategy當作授課的第一個pattern,可見strategy的確適合初學者學第一個學習的pattern。

Intent

定義一整族演算法,將每一個演算法封裝起來,可互換使用,更可以在不影響外界的情況下各別抽換所引用的演算法。

其UML表示法

GoF說strategy也稱為policy,我個人喜歡稱它為plugin,因為可以動態的換演算法,如同在eclipse上可以動態的換plugin一樣。

原本在單一class中有一個單一method很單純,如圖Grapher class只有drawShape()這個method,只能畫方形。

但後來『需求改變』,希望Grapher也能畫三角形和圓形,而且日後還可能增加功能,如畫橢圓形,菱形...,當然可以在Grapher陸續加上drawTriangle(),drawCircle(),drawEllipse(),但如此就違反OCP,Grapher須不斷的修改,根據DP第三守則"Identify the ASPects of your application that vary and separate them from what you stays the same",將『會變』的部份另外包成class,但這些class必須要和原來的class溝通,所以必須訂出『標准』彼此才能溝通,IShape就是彼此溝通的標准,Triangle,Circle,Square則必須實做IShape這個interface,這就是strategy pattern。

我們看看這個架構,若日後還有新的shape加入,Grapher,IShape,Triangle,Circle,Square皆不用修改,符合OCP的closed for modification原則,若要加入新的class,只需實做IShape即可,符合OCP的open for extension原則,所以是非常好維護的架構,事實上,.Net Framework和STL都用了很多strategy pattern。

簡言之,strategy pattern就是將會變動的member function用class包起來,變成object『掛』在原本的class上。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved