天天看點

三、了解工廠設計模式

在java中有三大設計模式,工廠設計模式,代理設計模式,單例設計模式。

工廠設計模式出現的目的是為了解決接口對象執行個體化的處理問題。

通過如下代碼來觀察:

程式執行結果:

【網絡消息】今天不用學習了 睡覺吧

在大部分情況下隻要擁有了接口和子類,那麼首先應該想到的就是利用接口子類進行接口執行個體化對象的處理

三、了解工廠設計模式

用戶端隻關注具體的消息内容(今天不用學習了 睡覺吧),而不關注具體的消息類型是什麼(網絡消息,電視消息,報紙消息);

但是使用new 關鍵字 就會帶來問題 此時用戶端不僅要處理消息内容 還要去處理消息類型。

此時的程式是利用了關鍵字“new”直接在用戶端上進行了指定接口對象的執行個體化處理,而這樣一來就造成了接口與指定子類之間的耦合問題。 <code>imessage msg = new netmessage();</code> ,在以後的開發設計裡面,關鍵字new是一個系統上最好用的對象執行個體化方式,但是也是耦合産生的最大元兇。,所有此時可以引入一個專門的過渡類,這個類負責接口對象的執行個體化生成。這個類即“工廠類”。

耦合性是程式結構中各個子產品之間互相關聯的度量。它取決于各個子產品之間的接口的複雜程度、調用子產品的方式以及哪些資訊通過接口。

耦合可以分為以下幾種,它們之間的耦合度由高到低排列如下:

(1) 内容耦合。當一個子產品直接修改或操作另一個子產品的資料時,或一個子產品不通過正常入口而轉入另一個子產品時,這樣的耦合被稱為内容耦合。内容耦合是最高程度的耦合,應該避免使用之。

(2) 公共耦合。兩個或兩個以上的子產品共同引用一個全局資料項,這種耦合被稱為公共耦合。在具有大量公共耦合的結構中,确定究竟是哪個子產品給全局變量賦了一個特定的值是十分困難的。

(3) 外部耦合 。一組子產品都通路同一全局簡單變量而不是同一全局資料結構,而且不是通過參數表傳遞該全局變量的資訊,則稱之為外部耦合。

(4) 控制耦合 。一個子產品通過接口向另一個子產品傳遞一個控制信号,接受信号的子產品根據信号值而進行适當的動作,這種耦合被稱為控制耦合。

(5) 标記耦合 。若一個子產品a通過接口向兩個子產品b和c傳遞一個公共參數,那麼稱子產品b和c之間存在一個标記耦合。

(6) 資料耦合。子產品之間通過參數來傳遞資料,那麼被稱為資料耦合。資料耦合是最低的一種耦合形式,系統中一般都存在這種類型的耦合,因為為了完成一些有意義的功能,往往需要将某些子產品的輸出資料作為另一些子產品的輸入資料。

(7) 非直接耦合 。兩個子產品之間沒有直接關系,它們之間的聯系完全是通過主子產品的控制和調用來實作的。

總結:耦合是影響軟體複雜程度和設計品質的一個重要因素,在設計上我們應采用以下原則:如果子產品間必須存在耦合,就盡量使用資料耦合,少用控制耦合,限制公共耦合的範圍,盡量避免使用内容耦合。

此時的用戶端不再關注具體的接口子類對象是如何建立的,此時所有與子類有關的定義全部交由factory工廠類來完成,用戶端不再關注子類,這樣就避免了用戶端與接口子類之間的耦合問題。

三、了解工廠設計模式

以上隻是最簡單的工廠設計模式,但是這樣的設計本身是存在缺陷的,因為目前所使用的工廠類如果在面對接口之類增加的時候也需要進行修改。

【報紙消息】剛才的網絡消息是假的 學習不能停

此時工廠類随着子類的增加也必須改動 這并不是我們想要的

是以,如果想要徹底編寫一個完善的工廠設計模式并不容易(這裡面所包括的問題不僅僅是一個對象執行個體化問題,還包含對象管理,對象個數控制等等一系列問題)。

現在這篇文章隻是通過一個最簡單的模型來介紹工廠設計模式

在以後的不斷學習中 再慢慢完善工廠設計模式。