java 工廠模式的講解及優(yōu)缺點(diǎn)的介紹
簡(jiǎn)單工廠模式介紹:
概要:
簡(jiǎn)單工廠模式,又稱為靜態(tài)工廠方法(Static Factory Method)模式,它屬于類創(chuàng)建型模式。在簡(jiǎn)單工廠模式中,把產(chǎn)品的生產(chǎn)方法封裝起來放進(jìn)工廠類,工廠類可以根據(jù)參數(shù)的不同返回不同產(chǎn)品類的實(shí)例。工廠類就是用來生產(chǎn)產(chǎn)品的類,把生產(chǎn)產(chǎn)品的方法放到工廠類里面去,工廠類里面用switch語句控制生產(chǎn)哪種商品,使用者只需要調(diào)用工廠類的靜態(tài)方法就可以實(shí)現(xiàn)產(chǎn)品類的實(shí)例化。
實(shí)現(xiàn)代碼:
package scut.designmodel.SimpleFactoryPattern;
//抽象產(chǎn)品類
abstract class Product{
public abstract void Show();
}
//產(chǎn)品A類
class ProductA extends Product{
@Override
public void Show() {
System.out.println("生產(chǎn)出了產(chǎn)品A");
}
}
//產(chǎn)品B類
class ProductB extends Product{
@Override
public void Show() {
System.out.println("生產(chǎn)出了產(chǎn)品C");
}
}
//產(chǎn)品C類
class ProductC extends Product{
@Override
public void Show() {
System.out.println("生產(chǎn)出了產(chǎn)品C");
}
}
//簡(jiǎn)單工廠類
class Factory {
public static Product Manufacture(String ProductName){
switch (ProductName){
case "A":
return new ProductA();
case "B":
return new ProductB();
case "C":
return new ProductC();
default:
return null;
}
}
}
//工廠產(chǎn)品生產(chǎn)流程
public class SimpleFactoryPattern {
public static void main(String[] args){
Factory mFactory = new Factory();
//客戶要產(chǎn)品A
try {
mFactory.Manufacture("A").Show();
}catch (NullPointerException e){
System.out.println("沒有這一類產(chǎn)品");
}
//客戶要產(chǎn)品B
try {
mFactory.Manufacture("B").Show();
}catch (NullPointerException e){
System.out.println("沒有這一類產(chǎn)品");
}
//客戶要產(chǎn)品C
try {
mFactory.Manufacture("C").Show();
}catch (NullPointerException e){
System.out.println("沒有這一類產(chǎn)品");
}
//客戶要產(chǎn)品D
try {
mFactory.Manufacture("D").Show();
}catch (NullPointerException e){
System.out.println("沒有這一類產(chǎn)品");
}
}
}
結(jié)果:
生產(chǎn)出了產(chǎn)品A 生產(chǎn)出了產(chǎn)品C 生產(chǎn)出了產(chǎn)品C 沒有這一類產(chǎn)品
應(yīng)用場(chǎng)景:
當(dāng)沒有使用工廠模式的時(shí)候,每個(gè)“產(chǎn)品”類都是分散的,沒有使用一個(gè)工廠接口把它們整合起來,而且,加入例子里面生產(chǎn)productA需要傳入三個(gè)“原料”參數(shù),使用者要清晰地知道這些參數(shù)才能把productA類實(shí)例化,每個(gè)產(chǎn)品參數(shù)不同的話,會(huì)讓使用者非常凌亂,使用“工廠”則可以把參數(shù)封裝在里面,讓使用者不用知道具體參數(shù)就可以實(shí)例化出所需要的“產(chǎn)品”類。
優(yōu)點(diǎn):
將創(chuàng)建實(shí)例的工作與使用實(shí)例的工作分開,使用者不必關(guān)心類對(duì)象如何創(chuàng)建,明確了職責(zé)。
把初始化實(shí)例時(shí)的工作放到工廠里進(jìn)行,使代碼更容易維護(hù)。 更符合面向?qū)ο蟮脑瓌t,面向接口編程,而不是面向?qū)崿F(xiàn)編程。
缺點(diǎn):
- 由于工廠類集中了所有產(chǎn)品創(chuàng)建邏輯,一旦不能正常工作,整個(gè)系統(tǒng)都要受到影響。
- 要新增產(chǎn)品類的時(shí)候,就要修改工廠類的代碼,違反了開放封閉原則(對(duì)擴(kuò)展的開放,對(duì)修改的關(guān)閉)。
- 簡(jiǎn)單工廠模式由于使用了靜態(tài)工廠方法,靜態(tài)方法不能被繼承和重寫,會(huì)造成工廠角色無法形成基于繼承的等級(jí)結(jié)構(gòu)。
雖然有不少的缺點(diǎn),但是簡(jiǎn)單工廠方法還是應(yīng)用得很廣泛,下面我們來看看它的升級(jí)版——工廠方法模式。
以上就是java工廠模式的介紹,如有疑問請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- 淺談Java面向接口編程
- 以Java代碼為例講解設(shè)計(jì)模式中的簡(jiǎn)單工廠模式
- 淺析Java設(shè)計(jì)模式編程中的單例模式和簡(jiǎn)單工廠模式
- java設(shè)計(jì)模式之簡(jiǎn)單工廠模式簡(jiǎn)述
- JAVA簡(jiǎn)單工廠模式(從現(xiàn)實(shí)生活角度理解代碼原理)
- 簡(jiǎn)單工廠模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- Java簡(jiǎn)單工廠模式定義與用法實(shí)例分析
- Java設(shè)計(jì)模式之工廠模式分析【簡(jiǎn)單工廠、工廠方法、抽象工廠】
- Java設(shè)計(jì)模式之抽象工廠模式
- 深入理解java三種工廠模式
- Java設(shè)計(jì)模式之工廠模式(Factory模式)介紹
- Java面向接口編程之簡(jiǎn)單工廠模式示例
相關(guān)文章
java對(duì)接微信小程序詳細(xì)流程(登錄&獲取用戶信息)
這篇文章主要給大家介紹了關(guān)于java對(duì)接微信小程序(登錄&獲取用戶信息)的相關(guān)資料,我們?cè)陂_發(fā)微信小程序時(shí)經(jīng)常需要獲取用戶微信用戶名以及頭像信息,微信提供了專門的接口API用于返回這些信息,需要的朋友可以參考下2023-08-08
spring為java.util.Properties類型的屬性進(jìn)行賦值過程解析
這篇文章主要介紹了spring為java.util.Properties類型的屬性進(jìn)行賦值過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
springboot中PostMapping正常接收json參數(shù)后返回404問題
這篇文章主要介紹了springboot中PostMapping正常接收json參數(shù)后返回404問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05
MyBatis通用Mapper實(shí)現(xiàn)原理及相關(guān)內(nèi)容
今天小編就為大家分享一篇關(guān)于MyBatis通用Mapper實(shí)現(xiàn)原理及相關(guān)內(nèi)容,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12
Java?Lambda表達(dá)式常用的函數(shù)式接口
這篇文章主要介紹了Java?Lambda表達(dá)式常用的函數(shù)式接口,文章基于Java?Lambda表達(dá)式展開對(duì)常用的函數(shù)式接口的介紹,具有一的的參考價(jià)值需要的小伙伴可以參考一下2022-04-04
Java File類 mkdir 不能創(chuàng)建多層目錄的解決
這篇文章主要介紹了Java File類 mkdir 不能創(chuàng)建多層目錄的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09

