我們在運用面向對象技術的時候,是用類概念從內部結構,行為來運用,來設計實現計算邏輯。
有很多的時候我們不能準確把握一個事物的本質,可能就是光從一個角度來看問題。既然從內部看了也實踐了,那么現在就可以從外部角度來觀察事物。對象有它的環境,在環境中分工合作,這個就像我們的現實社會,人與人之間,人和大自然都是分工協作,和諧共處的。
話題扯遠了,再回到我們的程序世界中,假如有一天我們要去社區辦個什么事情,去影院看個什么電影等等這些都可以抽象,建立一個模型,我們去社區辦事,電影院看電影都是去享受服務的,把這些服務的提供者都抽象到程序世界中,就可以用類來表示同時提供辦事、看電影等行為。社區辦事,影院看電影這兩個風 馬牛不相及的事情,在程序世界可以抽象成兩個提供不同服務的對象。從契約的角度,任何實現了這些服務的對象,都需要履行服務契約,從對象外部來講我們是不需要知道這些對象內部的,也就是我去辦事情,看電影,關鍵不是在什么地方能夠把握解決這些問題,而是什么服務能提供給我以完成目的。
試想有一天去看電影的同時也能把社區辦事的給解決了。那么就不能光光用類這個抽象事物來表示和思考,另外還有一個東西在設計模式中沒有明顯提到的,就是幾乎每種模式里面都有兩個層次,一個就是Abstract層次,一個就是Concrete層次。說白了就是對象的上面還有一個接口的東西,這里暫且不論Interface和Abstract Class的區別。這個時候想想那句“優先使用組合”的錦囊妙計,那么既能辦事又能看電影的超級英雄便能應運而生,當然在分析的時候我們不需要具體知道這個到底是什么地方來提供這些服務的,只需要設計辦事和看電影兩個接口就可以了,至于誰來實現這個服務,I don’t care.
相關文章