18不使用委託實現能自動偵測車距的智慧型汽車

2021-09-07 22:34:34 字數 2098 閱讀 1213

發明一輛智慧型汽車,能自動偵測與前方車輛的車距,當車距小於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...

何時使用委託而不使用介面

委託和介面都允許類設計器分離型別宣告和實現。給定的介面 可由任何類 或結構繼承和實現 可以為任何類中的方法建立委託 前提是該方法符合委託的方法簽名。介面引用或委託可由不了解實現該介面或委託方法的類的物件使用。既然存在這些相似性,那麼類設計器何時應使用委託,何時又該使用介面呢?在以下情況中使用委託 在...

何時使用委託而不使用介面

委託和介面都允許類設計器分離型別宣告和實現。給定的介面可由任何類或結構繼承和實現 可以為任何類中的方法建立委託,前提是該方法符合委託的方法簽名。介面引用或委託可由不了解實現該介面或委託方法的類的物件使用。既然存在這些相似性,那麼類設計器何時應使用委託,何時又該使用介面呢?在以下情況中使用委託 在以下...