在了解抽象工廠模式之前,首先來了解一下兩個術語:
產品等級結構也就是產品的繼承結構,例如乙個抽象類是電視機,子類有不同品牌的電視機,比如海爾電視機,海信電視機,tcl電視機,而抽象電視機與具體品牌的電視機之間構成了乙個產品等級結構,抽象電視機是父類,而具體品牌的電視機是子類。
產品族是指由乙個同乙個工廠產生的位於不同產品等級結構中的一組產品,例如海爾電器工廠生產的海爾電視機,海爾電冰箱。海爾電視機位於電視機產品等級結構中,海爾電冰箱位於電冰箱產品等級結構中,海爾電視機與海爾電冰箱共同構成了乙個產品族。
兩者示意圖如下:
抽象工廠模式包含四個角色:
介面**庫設計:開發一套**庫,使用者可以通過選單選擇**,不同的**提供視覺不同的按鈕,文字框等ui元素。這裡簡單起見假設開發兩套**:
每套**具有以下ui元素:
首先是ui元素,包括抽象元素以及具體元素:
inte***ce button
class springbutton implements button
}class summerbutton implements button
}inte***ce textfield
class springtextfield implements textfield
}class summertextfield implements textfield
}inte***ce combobox
class springcombobox implements combobox
}class summercombobox implements combobox
}
接著是工廠類,包括抽象工廠以及具體工廠:
inte***ce skinfactory
class springskinfactory implements skinfactory
public textfield createtextfield()
public combobox createcombobox()
}class summerskinfactory implements skinfactory
public textfield createtextfield()
public combobox createcombobox()
}
測試:
public class test
}
雖然使用抽象工廠模式增加新的**介面非常方便,但是如果增加乙個ui元素,會修改大量的**,需要修改抽象工廠以及每乙個具體工廠類,也就是說,不能夠在符合ocp(開放閉合原則)的前提下增加新的元件。
這是抽象工廠模式的最大缺點,儘管增加新的產品族(這裡是**)非常方便,但是增加新的產品等級結構(這裡是ui元素)很麻煩。抽象工廠模式的這種性質叫做開閉原則的傾斜性。因此設計人員在設計之初需要全面考慮,否則新增產品結構會導致大量的**修改。
主要缺點是增加新的產品等級結構麻煩,需要對系統進行大量的修改,違背了ocp
設計模式(六) 抽象工廠模式
例 最基本的資料訪問程式 class user public string getname class sqlserveruser public user getuser int id public class main sqlserveruser su new sqlserveruser 使得su...
設計模式學習筆記 抽象工廠模式
定義 為建立一組相關或相互依賴的物件提供一組介面,而且無需指定它們的具體類。抽象工廠模式是工廠模式的公升級版本,因為它應對的是更加複雜的業務,即當有多個業務品種 業務分類時,通過抽象工廠模式產生需要的物件是一種非常好的解決方式。由於抽象工廠類較為複雜,我覺得使用乙個具體的例子,更能形象的表達這個模式...
設計模式學習筆記 抽象工廠模式
抽象工廠開始之前,我不得不先說一句,關於工廠方法,我以為不太常用來著。而實際上,想到當年在學校,老師在教三層的時候告訴我們,service 與 dao 層必須都要繼承自介面,並提供乙個實現類,只是神秘的一笑告訴我們,這對 有好處,然而一直到了學期結束也不知道有什麼好處。大概也不知道什麼時間,越寫越多...