(原創)關於設計模式的理解:策略模式

一、策略模式的定義(老規矩,不愛看不看)

策略模式的用意是針對一組演算法,將每一個演算法封裝到具有共同介面的獨立的類中,從而使得它們可以相互替換。策略模式使得演算法可以在不影響到客戶端的情況下發生變化。

使用策略模式可以把行為和環境分割開來。環境類負責維持和查詢行為類,各種演算法則在具體策略類(ConcreteStrategy)中提供。由於演算法和環境獨立開來,演算法的增減、修改都不會影響環境和客戶端。當出現新的促銷折扣或現有的折扣政策出現變化時,只需要實現新的策略類,並在客戶端登記即可。策略模式相當於"可插入式(Pluggable)的演算法"。

二、策略模式的結構圖

這個模式涉及到三個角色:

1、環境(Context)角色:持有一個Strategy類的引用。

2、抽象策略(Strategy)角色:這是一個抽象角色,通常由一個介面或抽象類實現。此角色給出所有的具體策略類所需的介面。

3、具體策略(ConcreteStrategy)角色:包裝了相關的演算法或行為。

三、我的理解

核心思想形象化:

早晨起床,J問L:「你今天是穿白色胖次、黑色胖次還是粉紅色胖次呢?「。L一臉嬌羞的說:」人家今天想穿粉紅色的~「,於是J就給L拿了一條爆炸可愛的粉紅色胖次。

1、環境(Context)角色:L。

2、抽象策略(Strategy)角色:穿胖次。

3、具體策略(ConcreteStrategy)角色:穿白色胖次、黑色胖次還是粉紅色胖次。

示例性代碼:

public interface 穿胖次{ void 穿胖次();}public class 穿白色胖次 : 穿胖次{ public void 穿胖次() { Console.WriteLine("穿白色胖次"); }}public class 穿黑色胖次 :穿胖次{ public void 穿胖次() { Console.WriteLine("穿黑色胖次"); }}public class 穿粉紅色胖次 : 穿胖次{ public void 穿胖次() { Console.WriteLine("穿粉紅色胖次"); }}public class JMan{ private 穿胖次類 穿胖次; public void 接受指令(穿胖次類 胖次) { 穿胖次= 胖次; } public void 選擇胖次() { 穿胖次.穿胖次(); }}class Program{ static void Main(string[] args) { 穿胖次類 穿胖次= null; JMan J = new JMan(); while (true) { Console.WriteLine("你今天是穿白色胖次、黑色胖次還是粉紅色胖次?"); String LWant = Console.ReadLine(); switch (LWant) { case "白色胖次": 穿胖次 = new 穿白色胖次(); break; case "黑色胖次": 穿胖次 = new 黑色胖次(); break; case "粉紅色胖次": 穿胖次 = new 粉紅色胖次(); break; } J.接受指令(穿胖次); J.選擇胖次(); } }}

待更新~


推薦閱讀:

Vim Clutch | 面向腳踏板編程……
想要孩子認真學編程?可以這樣在家上課
C++中關於跨平台中子線程式控制制的一些心得(2):用於線程的同步的Async容器
雲時代的編程模式將會走向何方?

TAG:C | 編程 | 設計模式 |