8 Factory Pattern 工廠模式

2021-09-24 20:01:31 字數 1324 閱讀 4164

void onclick(){

splite splite=new filesplite();

splite.execu();

在編譯這個方法時,必須得現有filesplite類,而filesplite是具體實現細節,那麼就違反了依賴倒置原則。

那麼如何使的該方法中不出現具體實現細節的類呢?除了new關鍵字可以返回乙個物件,其實還有乙個方法可以獲得物件例項,通過方法的返回值獲得那麼我們更改為:

void onclick(){

//這個createfilefactory類是createfactory的子類,但它只生成file分割器物件,

//對應分割器的類別,createfactory還有另外兩個子類。

createfactory cf=new createfilefactory();

//從另乙個物件的方法返回值中獲取物件

splite splite=cf.create();

splite.execu();

class createfilefactory implements createfactory{

//這個方法的返回值語句會將filesplite型別物件向上轉換成splite 型別物件。

@override

public splite create(){

return new filesplite();

但是這樣一來,又new createfilefactory();依然是依賴細節程式設計了。怎麼把這個去掉呢?其實可以為這個方法新增乙個形參,利用引數傳遞,將子類的建立放到其他類的方法中:

void onclick(createfactory createfactory){

//這個createfilefactory類是createfactory的子類,但它只生成file分割器物件,

//對應分割器的類別,createfactory還有另外兩個子類。

createfactory cf=createfactory;

//從另乙個物件的方法返回值中獲取物件

splite splite=cf.create();

splite.execu();

這樣這個方法中的變數就都是介面了,而createfactory 就是工廠。

這個方法就屬於穩定的部分了,而不穩定的部分肯定是存在的,因為不管怎樣都逃不了new乙個實現細節物件,但是設計模式就是將分布在各個地方的不穩定的部分都趕到乙個地方。

這裡有個疑問,為什麼解決createfactory 的子類們的建立通過傳參實現,而解決splite 的子類們的建立通過返回值實現?不覺得createfactory 和它的子類們很多餘嗎?為什麼不在開始就使用傳參實現splite 的子類們的建立呢?

設計模式 factory pattern

工廠方法模式 定義了乙個建立物件的介面,但由子類解決要例項化的是哪乙個。工廠方法讓類把例項化推遲到子類。工廠方法,將產品的 實現 從 使用 中解耦。oo設計中遵循的原則,實現依賴倒置 1 變數不可以持有具體類的引用 2 不要讓類派生自具體類 3 不要覆蓋基類中已實現的方法 單件模式 singleto...

factory pattern 工廠模式

工廠模式分為 簡單工廠 工廠方法 抽象工廠 factory 感覺所有的產品都在乙個類裡面生產出來 factory method 感覺所有的實現都在子類中實現,而子類都會實現父類中共有的方法,從而生產出各種產品 abstract factory 感覺是對抽象方法的公升級,就拿開汽車來說 工廠方法可能就...

工廠模式 Factory Pattern

首先,還是引入乙個場景 一家披薩店,有許多的披薩種類 cheezepizza,clampizza 在新建乙個披薩的時候,很可能會這樣做 public class pizzafactory else if clam pizza.equals type else if pepperoni pizza.e...