乙個插排引發的設計思想 (一) 觀察者模式
乙個插排引發的設計思想 (二) 抽象類與介面
乙個插排引發的設計思想 (三) 委託與事件
...待續....
其中插頭的規範部分值得思考, 上文採用了abstract class的方式,
既然是定義規範, 為什麼不用介面方式呢?
一. 下面把上面的例子改造一下, 將原來的abstract class改為介面.
1public
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無法實現的, 如下面**所示
1public
abstract
class214
15//
其他通用方法
16 }
從另乙個不同來看, inte***ce允許繼承多個, 而abstract class不可以.
所以我們也可以這樣想, abstract class的含義是"是xx", 反映到例子總就是插座要求插上的裝置是國標電器.
如果我們把介面再改一下,
1public
inte***ce
igbelectricalable25
6public
class
other : igbelectricalable712
13private
void
dosomething()
1417 }
只是改了個名字, 大概意思是擁有符合國標標準插頭的, 注意這裡不再強調是電器了.
三.原來的**調整如下
1public
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也插入插排
1class
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...