乙個插排引發的設計思想 二 抽象類與介面

2021-09-07 16:42:06 字數 2972 閱讀 7432

乙個插排引發的設計思想 (一) 觀察者模式

乙個插排引發的設計思想 (二) 抽象類與介面

乙個插排引發的設計思想 (三) 委託與事件

...待續....

其中插頭的規範部分值得思考, 上文採用了abstract class的方式, 

既然是定義規範, 為什麼不用介面方式呢?

一. 下面把上面的例子改造一下, 將原來的abstract class改為介面.

1

public

inte***ce25

6public

class

output712

13public

void powered(int left,int

right)

1419}20

public

void

2124

25public

void

2629}30

3132

33public

class

3440

41private

void

show()

4245

private

void

sound()

4649}50

51public

class

5257

58private

void

heat()

5962 }

執行一下結果也是一樣, 看起來也沒啥不同的.

那麼到底該用那種方法呢?

二. 現在看一下 abstract class和inte***ce的區別

二者都可以定義一些"規範", 都不可以例項化,

但abstract class中可以有實現的方法, 介面不可以

假如電器有一一些共用的方法例如功率計算(powercalculation)等, 可以在abstract class中實現, 非常方便, 這是inte***ce無法實現的, 如下面**所示

1

public

abstract

class214

15//

其他通用方法

16 }

從另乙個不同來看, inte***ce允許繼承多個, 而abstract class不可以.

所以我們也可以這樣想, abstract class的含義是"是xx", 反映到例子總就是插座要求插上的裝置是國標電器.

如果我們把介面再改一下,

1

public

inte***ce

igbelectricalable25

6public

class

other : igbelectricalable712

13private

void

dosomething()

1417 }

只是改了個名字, 大概意思是擁有符合國標標準插頭的, 注意這裡不再強調是電器了.

三.原來的**調整如下

1

public

class

output27

private listeacollection;

8public

void powered(int left,int

right)914

}15public

void

addinput(igbelectricalable item)

1619

20public

void

removeinput(igbelectricalable item)

2124}25

26public

abstract

class

2739

40//

其他通用方法41}

4243

public

class

4450

51private

void

show()

5255

private

void

sound()

5659}60

61public

class

6267

68private

void

heat()

6972 }

測試一下將other也插入插排

1

class

program

212 }

可以看到結果**現了"i am other".

四:小結

本次用介面的方式對原例子進行了改造, 進一步將插排和插入裝置解耦.

文一中, 插排要求插入的裝置是符合國標的電器.

本文中, 插排要求插入的裝置有符合國標的插頭即可, 無論什麼樣的裝置, 無論其是否是電器.

五.思考

由此, 現在進一步想一想, 既然是有符合國標的插頭即可.而插頭無非就是input乙個方法.

而前兩種方式無論是抽象類還是介面, 都是將裝置本身放入了插排的集合中, 

即addinput(igbelectricalable item), 然後再由插排呼叫集合中裝置的input方法.

這貌似搞得有點複雜, 耦合度還是高, 而且也不符合實際中直插入插頭而不是整個裝置的事實.

那麼我們是否可以將此處的引數用由插入裝置本身(觀察者)改為裝置的input方法呢

即 addinput(input _input), 然後再由插排直接呼叫集合中的input方法.

下篇繼續討論..

乙個插排引發的設計思想 一 觀察者模式

乙個插排引發的設計思想 一 觀察者模式 乙個插排引發的設計思想 二 抽象類與介面 乙個插排引發的設計思想 三 委託與事件 待續.不知道聊到設計模式,經常給人兩種感覺 1.原來這個就是a設計模式呀,我之前也經常這麼幹,就是到現在才知道a設計模式指的就是這個.2.這個b設計模式,雖然書上講的晦澀難懂,但...

乙個插排引發的設計思想 三 委託與事件

乙個插排引發的設計思想 一 觀察者模式 乙個插排引發的設計思想 二 抽象類與介面 乙個插排引發的設計思想 三 委託與事件 待續.前兩篇文章循序漸進的介紹了觀察者模式 抽象類和介面,並分析了抽象類和介面的不同.結尾處有這樣的問題 無論是抽象類還是介面,都是將裝置本身放入了插排的集合中,那麼我們是否可以...

設定乙個抽象類!

我的android專案所有的介面都是 橫屏的,我是用以下 進行控制橫屏顯示的 requestwindowfeature window.feature no title getwindow setflags windowmanager.layoutparams.flag fullscreen,wind...