發明一輛智慧型汽車,能自動偵測與前方車輛的車距,當車距小於100公尺的時候,就報警。
□ 思路
● 報警器顯然是觀察者
● 智慧型汽車就是被觀察者
智慧型汽車有乙個偵測車距的方法,當車距小於100公尺的時候,就觸發乙個事件。這個事件就遍歷所有註冊的觀察者,讓每個觀察這作出響應。
被觀察者介面只負責註冊和取消註冊。
1://被觀察者介面
2:public
inte***ce iobservable
3:觀察者介面也只有乙個行為。
1://觀察者介面
2:public
inte***ce iobserver
3:還需要乙個被觀察者抽象基類實現被觀察者介面,他維護了乙個被觀察者的集合,並實施註冊、取消註冊和通知觀察者,通知觀察者的方法涉及為virtual,需要抽象類的子類來觸發。
1://被觀察者抽象基類
2:public
abstract
class subjectbase : iobservable
3:
10:
11:public
void unregister(iobserver obj)
12:
15:
16:protected
virtual
void notify()
17:
22: }
23: }
24:智慧型汽車就繼承了被觀察者這個抽象基類,他不僅有測距的方法,還有當車距小於100公尺時觸發事件,觸發事件的實質就是呼叫被觀察者抽象基類的通知方法,讓觀察者作出響應。
1:public
class smartcar : subjectbase
2:
13:
14:public
string brand }
15:public
string type }
16:
17:public smartcar():this("大眾","polo"){}
18:
19:protected
virtual
void ondistance()
20:
23:
24:public
void detectdistance()
25:
33: }
34: }
35: }
36:
37: 報警器就是觀察者,只需要作響應。
38:
39:public
class alarm : iobserver
40:
45: }
46:主程式先讓被觀察者註冊觀察者,然後執行被觀察者的方法,當車距小於100公尺,就觸發被觀察者的通知方法,實際上呼叫的是被觀察者抽象基類的虛方法,挨個通知觀察者作出響應。
1:class program
2:
12: }
13:
14:
15:結果:
使用Activex實現自動列印 不使用PAZU
最開始使用pazu控制項來實現自動列印。安裝了smart printer來列印tif檔案。使用localhost是可以的。但是用ip訪問,就不能用。需要license。雖然是免費申請的。但是麻煩啊,而且我的伺服器是外網不能訪問的。心一狠,我就不信不用pazu做不出來。在頁面上新增 js functi...
何時使用委託而不使用介面
委託和介面都允許類設計器分離型別宣告和實現。給定的介面 可由任何類 或結構繼承和實現 可以為任何類中的方法建立委託 前提是該方法符合委託的方法簽名。介面引用或委託可由不了解實現該介面或委託方法的類的物件使用。既然存在這些相似性,那麼類設計器何時應使用委託,何時又該使用介面呢?在以下情況中使用委託 在...
何時使用委託而不使用介面
委託和介面都允許類設計器分離型別宣告和實現。給定的介面可由任何類或結構繼承和實現 可以為任何類中的方法建立委託,前提是該方法符合委託的方法簽名。介面引用或委託可由不了解實現該介面或委託方法的類的物件使用。既然存在這些相似性,那麼類設計器何時應使用委託,何時又該使用介面呢?在以下情況中使用委託 在以下...