前面一篇文章已經詳細的介紹了簡單工廠模式。如果沒有讀過可以先了解一下簡單工廠模式。
細說工廠模式之簡單工廠模式(一)
看到最後我們會發現通過傳入引數給工廠類來生產相應的電視產品還是有一些弊端的,具體體現在當我們需要增加乙個創維電視類的時候這時候我們不光要新增乙個創維電視類,還得修改咱們的工廠類。這樣的話就違反了咱們設計模式中提到的開閉原則了。為了使我們的生產電視這一設計模式更具有延展性,這裡就該工廠方法模式也就是一般工廠模式出場了。
相比簡單工廠模式,一般工廠模式不光設計了抽象的電視基類,也同時設計了抽象的工廠父類,每類電視都有乙個具體的工廠類生產,而每個具體的工廠只需要繼承他們抽象的工廠父類。
通過上面的例項類圖我們就可以在
client
類中實現樂視電視工廠生產樂視電視,小公尺電視工廠生產小公尺電視。
這裡的itv抽象類跟前面一篇文章中是一樣的,咱們這邊一般抽象工廠模式主要修改的是工廠類這一塊。
package com.weiyu.factory;
/** * created by sam on 7/14/2016.
* * 這裡是乙個抽象類,這裡有獲取**以及生產過程這兩個抽象方法
*/public abstract class itv
抽象的父類中有
price
和produceprocess
兩個方法,分別用來定義每台電視的**以及電視的生產過程。接著咱們分別來寫他的三個子類。
letv
package com.weiyu.factory;
/** * created by sam on 7/14/2016.
*/public class letv extends itv
@override
public void produceprocess()
}
mitv
package com.weiyu.factory;
/** * created by sam on 7/14/2016.
*/public class mitv extends itv
@override
public void produceprocess()
}
hisensetv
package com.weiyu.factory;
/** * created by sam on 7/14/2016.
*/public class hisensetv extends itv
@override
public void produceprocess()
}
接著咱們來看一下
itvfactory
這個抽象的工廠父類。
package com.weiyu.factory;
/** * created by sam on 7/14/2016.
*/public abstract class itvfactory
再來看一下這個抽象工廠父類的三個子類。
letvfactory
package com.weiyu.factory;
/** * created by sam on 7/14/2016.
*/public class letvfactory extends itvfactory
}
mitvfactory
package com.weiyu.factory;
/** * created by sam on 7/14/2016.
*/public class mitvfactory extends itvfactory
}
hisensetvfactory
package com.weiyu.factory;
/** * created by sam on 7/14/2016.
*/public class hisensetvfactory extends itvfactory
}
最後咱們再來看看
client
類中怎麼呼叫不同的工廠類來生產相應的電視的
package com.weiyu.factory;
/** * created by sam on 7/14/2016.
*/public class client
}
從該類中就可以看出可以呼叫樂視工廠類來生產樂視電視,這樣類的職責就比較分明。同時,當我們需要新增加乙個類的時候只需要增加乙個電視類以及相應的工廠類,這樣就不用修改原有的工廠方法,即做到了開閉原則。
從最後的結果我們可以看到每個電視類有不同的生產過程以及生產方法。接下來一篇我們會繼續分析抽象工廠模式。
細說工廠模式之抽象工廠模式(三)
工廠模式之一 簡單工廠模式
在物件導向程式設計中,產生乙個物件例項最常用的方法是使用new關鍵字來建立,但這樣耦合度太高,如果建立此物件時,需要一些其他的操作,這些 建立物件和一些其他的操作 如果沒有封裝起來給客戶端使用,客戶端大量使用這些 一旦這些重複的操作需要更改,那麼帶來的工作量將是巨大的,也不利於擴充套件。所以我們建立...
設計模式系列之一 工廠模式
定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。抽象產品類 public abstract class product 業務邏輯處理 public abstract void method2 具體產品類public class concreteproduc...
工廠模式二 工廠方法模式
使用者只需要關心產品對應的工廠,不需要關心建立細節。例如貓和狗都屬於動物一類,都具有吃飯這個功能。先定義介面ianimal public inte ce ianimal實現介面ianimal介面cat類和dog類 public class cat implements ianimal public ...