工廠模式屬于創(chuàng)建型設(shè)計(jì)模式。是日常使用比較多的一種設(shè)計(jì)模式。比如Logback,Spring等框架中都大量使用該設(shè)計(jì)模式。
上篇文章提到的簡(jiǎn)單工廠模式雖然在簡(jiǎn)單系統(tǒng)可以用一用,但是因?yàn)楣S類(lèi)本身包含太多業(yè)務(wù)邏輯,而且如果想增加新的圖表類(lèi)型,需要修改工廠類(lèi)等缺點(diǎn)。所以我們真正生產(chǎn)系統(tǒng)更多地使用工廠模式。
工廠模式為每一個(gè)類(lèi)都定義一個(gè)單獨(dú)的工廠類(lèi),該工廠類(lèi)只負(fù)責(zé)創(chuàng)建單一的產(chǎn)品。
舉個(gè)例子
通過(guò)工廠模式實(shí)現(xiàn)日志的創(chuàng)建,為不同種類(lèi)的Logger分別創(chuàng)建不同類(lèi)型的工廠。
來(lái)看一下UML圖:
來(lái)看一下代碼如何實(shí)現(xiàn)
先來(lái)定義一個(gè)Logger接口,以及LoggerFactory接口
public interface Logger { void writeLogger();}復(fù)制代碼
public interface LoggerFactory{ Logger createLogger();}復(fù)制代碼
分別定義FileLogger和FileLoggerFactory
public class FileLogger implements Logger { @Override public void writeLogger() { System.out.println("File logger"); }}復(fù)制代碼
public class FileLoggerFactory implements LoggerFactory { @Override public Logger createLogger() { //不同Logger的個(gè)性初始化工作 Logger logger = new FileLogger(); return logger; }}復(fù)制代碼
如果想增加新的Logger直接實(shí)現(xiàn)Logger和LoggerFactory就好了,看一下客戶(hù)端如何使用
public class Client { public static void main(String[] args){ Logger logger; LoggerFactory loggerFactory; loggerFactory = new FileLoggerFactory(); logger = loggerFactory.createLogger(); logger.writeLogger(); }}復(fù)制代碼
總結(jié)
工廠模式是創(chuàng)建型模式之一,日常使用比較多,每類(lèi)產(chǎn)品都有對(duì)應(yīng)的一個(gè)工廠類(lèi)。工廠模式把簡(jiǎn)單工廠的內(nèi)部邏輯遷移到了客戶(hù)端,當(dāng)需要對(duì)功能擴(kuò)展時(shí),只需要修改客戶(hù)端就OK了。
作者:花括號(hào)MC
鏈接:https://juejin.cn/post/7008785463775346695
來(lái)源:掘金
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。