策略模式 上下文與內部類的思考

2021-07-09 18:49:10 字數 3669 閱讀 6692

策略模式一直程式開發中,最常用的模式之一;它的功能就是定義了一系列的演算法,這些演算法定義著公共的介面,所以它們之間可以相互替換。這使得我們在開發過程中,若有新的策略需要擴充套件時,程式變的很容易開發。下面是策略模式的結構示意圖:

從結構示意圖中,我們能清楚的感受到,策略模式的巧妙之處就是將變化的東西(這裡我們稱之為演算法)通過定義乙個相同的公共的介面封裝且隔離;以不同的策略實現相同的介面,使程式能夠完成各種任務的同時,讓上層的程式設計針對介面,實現不變,也不關心其呼叫的是哪種策略。

然而在實際開發中,我們的需求往往不會像結構示意圖那樣,如此簡單、如此

******

。實際較為常見的情況就是:上層的呼叫需要與介面之間有一定的互動。互動的可能是一些屬性,或是一些方法。這樣的互動往往會讓介面變的難以呼叫;於是上下文的引入就是勢在必行。將相關的屬性或一些公共的方法封裝到上下文中,讓上下文去和介面進行複雜的互動。而上層的呼叫只需要跟上下文打交道就可以。下面有包含上下文的策略模式結構示意圖:

仔細看看兩個結構示意圖的變化,其實不外乎將變的東西和不變的東西進行封裝與隔離,這樣不變的東西能夠盡可能的減小其變化,而變的東西更容易修改或擴充;其實這也正是軟體設計的基本原則。

透過示意圖,我們上下文物件,將自己傳遞給介面,方便介面調取它的屬性與方法,以完成互動。如此將前面提到的互動的行為提取出來,封裝在自己內部,對上層提供統一呼叫方法。也正是將變化與不變封裝且隔離。

正如前面提到的,上下文中封裝了上層呼叫類與介面間的互動;但這些互動有個前提,那就是它們能被抽象出來。另一些互動在我們的業務需求中無法被抽象出來。換句話說,這些互動,就是要延遲到上層呼叫內中來設計與實現的。在這種情況下:上層呼叫類與介面的某個策略的實現往往是緊耦合的、並且它們是一對一。

要完成它們之間的這種互動,設計它們間通訊的方法,會讓**變雜亂,同時也增加了呼叫介面的難度。

這時內部類的優勢可以在此發揮:我們將介面的實現類放到上層呼叫類中,變成上層呼叫類的乙個內部類;由於內部類可以任意呼叫其外部類的屬性和方法的特性。它們能直接的無阻礙的通訊,完全不同設計多餘的介面方法來完成互動;如此一來也正好符合它們一對一的關係。下面是我簡單寫的乙個小

demo:

策略介面: ?

12

3

4

5

6

7

8

/**

* 策略演算法介面

* @author breath_l

*

*/

publicinte***cestrategy

上下文類: ?

12

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

/**

* 上下文類

* @author breath_l

*

*/

publicclasscontext

/**

* 暴露給上層物件呼叫的方法

*/

publicvoiddostrategynow()

}

上層呼叫類: ?

12

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

publicclasstopgetter

};

context =newcontext("hello world !", in_strategy);

}

privatestring bedependent()

publicvoidstarthere()

publicstaticvoidmain(string args)

}

仔細思考上下文和內部類,它們算是策略模式在封裝和隔離變與不變的東西時,的乙個深入設計。萬變不離其中的還是軟體設計的基本原則。還是那句話:沒有最完美的設計,只有最符合業務的實現。也許此刻的思考只是符合我最近的業務,不怕見笑,做一下記錄與分享。

文章**:

程序上下文與中斷上下文的理解

一.什麼是核心態和使用者態 使用者態 使用者程式執行空間。1.程序上下文 1 程序上文 其是指程序由使用者態切換到核心態是需要儲存使用者態時cpu暫存器中的值,程序狀態以及堆疊上的內容,即儲存當前程序的程序上下文,以便再次執行該程序時,能夠恢復切換時的狀態,繼續執行。2 程序下文 其是指切換到核心態...

程序上下文與中斷上下文的理解

使用者態 使用者程式執行空間。1.程序上下文 1 程序上文 其是指程序由使用者態切換到核心態是需要儲存使用者態時cpu暫存器中的值,程序狀態以及堆疊上的內容,即儲存當前程序的程序上下文,以便再次執行該程序時,能夠恢復切換時的狀態,繼續執行。2 程序下文 其是指切換到核心態後執行的程式,即程序執行在核...

程序上下文與中斷上下文的理解

使用者態 使用者程式執行空間。1.程序上下文 1 程序上文 其是指程序由使用者態切換到核心態是需要儲存使用者態時cpu暫存器中的值,程序狀態以及堆疊上的內容,即儲存當前程序的程序上下文,以便再次執行該程序時,能夠恢復切換時的狀態,繼續執行。2 程序下文 其是指切換到核心態後執行的程式,即程序執行在核...