這兩天抽空學習一下設計模式,剛開始遇到工廠模式,感覺工廠方法模式和抽象工廠模式的區別有點模糊,看了之前的面試資料也是有點區分不清,於是查閱一些網上的資料和部落格,記錄一下。
1,工廠方法模式: 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,工廠方法使得乙個類的例項化延遲到了子類
工廠方法在簡單工廠的基礎上再包了一層工廠,所有的工廠都是此工廠的子類。而產生物件的型別由子類工廠決定。(摘自別的部落格,**)
//定義上級工廠的介面
public inte***ce ifractory
//為每乙個類建立工廠
/** * 工廠方法 為每個物件生成乙個工廠類
*/public class addoperationfactory implements ifractory
}public class suboperationfactory implements ifractory
}public class muloperationfactory implements ifractory
}public class divoperationfactory implements ifractory
}//客戶端**
ifractory fractory = new addoperationfactory();
operation operation = fractory.generateoper();
operation.getresult(firstnum,secondnum);
---------------------
原文:
工廠方法把類的例項化推遲到其子類,由客戶端**決定選擇對應工廠類進行例項化。將判斷問題移到客戶端,但是如果工廠方法模式遇到需要更改產品線,只需要更改乙個工廠例項化物件即可,非常方便。
2.抽象工廠模式: 提供乙個建立一系列相關相互依賴物件的介面,而無需指定他們具體的類。抽象工廠為不同產品族的物件建立提供介面。
使用場景:系統需要在不同產品族進行切換
/*** @description 抽象工廠模式:最原始工廠
* @author xg
* @date 2018/10/11 10:02
*/public inte***ce ifactory
/**
* @description 鍵盤
* @author xg
* @date 2018/10/11 10:04
*/public inte***ce keyboard
/** * @description 滑鼠
* @author xg
* @date 2018/10/11 10:06
*/public inte***ce mouse
/**
* @description 羅技產品
* @author xg
* @date 2018/10/11 10:08
*/public class lgkeyboard implements keyboard
}/**
* @description 羅技產品
* @author xg
* @date 2018/10/11 10:09
*/public class lgmouse implements mouse
}/**
* @description 雷蛇產品
* @author xg
* @date 2018/10/11 10:10
*/public class lskeyboard implements keyboard
}/**
* @description 雷蛇產品
* @author xg
* @date 2018/10/11 10:12
*/public class lsmouse implements mouse
}
/**
* @description 羅技工廠 不同產品組使用同乙個工廠
* @author xg
* @date 2018/10/11 10:12
*/public class lgfactory implements ifactory
@override
public mouse createmouse()
}/**
* @description 雷蛇工廠
* @author xg
* @date 2018/10/11 10:13
*/public class lsfactory implements ifactory
@override
public mouse createmouse()
}
package factory_demo;
import factory_demo.product.keyboard;
import factory_demo.product.mouse;
/** * @description 抽象工廠模式測試 客戶端**
* @author xg
* @date 2018/10/11 10:16
*/public class factorytest
}
好處:①便於交換產品系列,具體工廠在**中一般只出現一次。這就使得改變應用的具體工廠很容易。
②能讓具體的建立物件例項和客戶端分離,客戶端是通過他們的抽象介面操作例項
缺點:不太易於拓展,如果需要自增功能,或者自增產品,則需要至少修改三個類,而且例項化的**是寫死在程式中的 , 這樣無法避免違背開放-關閉原則。
對於上述問題,可以通過配置檔案,結合反射的方式來解決。
自己理解還不是很到位,文字總結也是依照別人理解,只能對**有所意會,先記錄下來供以後補充和學習。
設計模式 工廠模式(工廠方法 抽象工廠)
1 工廠方法模式 factory method 定義乙個用於建立物件的介面,讓子類決定例項化哪個類。工廠方法使乙個類的例項化延遲到其子類。正如建立交通工具,可以通過不同的工廠方法建立所需的物件。類圖 對比 1 工廠方法在產品維度,即類圖中movable方向拓展比較方便,只需增加對應的類及相應的工廠方...
設計模式 工廠方法 抽象工廠模式
在業務邏輯中往往有需要建立物件的需求 如何將這部分邏輯封裝並且使得其能個適應於頻繁的變化呢?簡單工廠模式 將物件建立邏輯封裝隔離在簡單工廠類的方法中。簡單工廠的常見實現方式 1 簡單工廠類以及其建立物件的靜態方法 其客戶可以直接呼叫該類的靜態方法。2 簡單工廠類以及其建立物件的成員方法 其客戶 需要...
設計模式 工廠方法模式 抽象工廠模式
最近擠了擠時間出來看了下設計模式,汗!總算來總結點東東了,最近專案忙得暈頭轉向了啊t.t好了言歸正傳,開始總結。理論定義來一套 設計模式 design patterns 是一套被反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。使用設計模式是為了可重用 讓 更容易被他人理解 保證 可靠性。設計...