數據與表現分離
程序業務邏輯與表現無關
表現可以是圖形的也可以是文本的
表現可以是當地的也可以是遠程的
View和Field的關係
表現與數據的關係
View只管根據Field畫出圖形
Field只管數據的存放
一旦數據更新以後,通知View重新畫出整個畫面
不去精心設計哪個局部需要更新
這樣簡化了程序邏輯
是在計算機運算速度提高的基礎上實現的
責任驅動的設計
將程序要實現的功能分配到合適的類/對象中去是設計中非常重要的一環
網格化
圖形界面本身有更多的解析度
但是將畫面格式化以後,數據就更容易處理了
Cell類的地位很尷尬
在Cell程序中它表達了細胞
但是同時它也表達了放在網格中的一個格子
Fox和Rabbit是否應該從Cell繼承?
所有OP語言都不支持多繼承,Java也不例外,只有C++可以多繼承
接口
接口是純抽象類
所有的成員函數都是抽象函數
所有的成員變量都是public static final
接口規定了長什麼樣,但是不管裏面有什麼
interface是一種特殊的class,在Java中和class的地位相同,凡是可以出現class的地方都可以用interface替代
實現接口
類用extends,接口用implements
類可以實現很多接口
接口可以繼承接口,但不能繼承類
接口不能實現接口
面向接口的編程方式
設計程序時先定義接口,再實現類
任何需要在函數間傳入傳出的一定是接口而不是具體的類、
是Java成功的關鍵之一,因爲極適合多人同時寫一個大程序
也是Java被批評的要點之一,應爲代碼量膨脹起來很快
Cell和Field的關係
Cell在Field中,但是Cell的很多操作需要Field的數據
方法一:
讓每個Cell有一個Field的管理者(Cell知道Field)
方法二:
由外部第三方來建立兩者之間的聯繫(Cell不知道Field)
部件,容器
部件可以被放在容器中
容器也是屬於一種部件,所以容器也是可以被放在另一個容器中的
當一個部件被放入一個容器中時,容器就要對放入其中的部件進行管理,這個就被稱爲佈局管理器
佈局中可以使用BorderLayout,BorderLayout一共有五個位置:NORTH、SOUTH、WEST、EAST、CENTER,每一個位置同一時間只能有一個部件存在,如果BorderLayout不指明的話默認是CENTER,同一時間如果有多個部件存在,那麼後定義的將會覆蓋原有的部件
BorderLayout的好處:當顯示環境發生變化時,BorderLayout可以幫助你根據當時的實際的顯示情況來計算出一個合適的視覺效果,不一定美觀,但是可以保證所有東西都可以被用戶所看見
消息機制:
注入反轉
由按鈕公佈一個守聽者接口和一對註冊/註銷函數
你的代碼實現那個接口,將守聽者對象註冊在按鈕上
一旦按鈕被按下,就會反過來調用你的守聽者對象的某個函數
內部類
定義在別的類內部、函數內部的類
內部類能直接訪問外部的全部資源
包括任何私有的成員
外部是函數時,只能訪問那個函數裏final的變量
匿名類
在new對象地時候給出的類的定義形成了匿名類
匿名類可以繼承某類,也可以實現某接口
Swing的消息機制廣泛使用匿名類