設(shè)計(jì)模式系列-工廠模式
工廠模式屬于創(chuàng)建型設(shè)計(jì)模式。是日常使用比較多的一種設(shè)計(jì)模式。比如Logback,Spring等框架中都大量使用該設(shè)計(jì)模式。
上篇文章提到的簡(jiǎn)單工廠模式雖然在簡(jiǎn)單系統(tǒng)可以用一用,但是因?yàn)楣S類本身包含太多業(yè)務(wù)邏輯,而且如果想增加新的圖表類型,需要修改工廠類等缺點(diǎn)。所以我們的生產(chǎn)系統(tǒng)更多地使用工廠模式。
工廠模式為每一個(gè)類都定義一個(gè)單獨(dú)的工廠類,該工廠類只負(fù)責(zé)創(chuàng)建單一的產(chǎn)品。
舉個(gè)例子
通過工廠模式實(shí)現(xiàn)日志的創(chuàng)建,為不同種類的Logger分別創(chuàng)建不同類型的工廠。
來看一下UML圖:
來看一下代碼如何實(shí)現(xiàn)。
先來定義一個(gè)Logger接口,以及LoggerFactory接口。
- public interface Logger {
- void writeLogger();
- }
- public interface LoggerFactory{
- Logger createLogger();
- }
分別定義FileLogger和FileLoggerFactory。
- public class FileLogger implements Logger {
- @Override
- public void writeLogger() {
- System.out.println("File logger");
- }
- }
如果想增加新的Logger直接實(shí)現(xiàn)Logger和LoggerFactory就好了,看一下客戶端如何使用。
- public class FileLoggerFactory implements LoggerFactory {
- @Override
- public Logger createLogger() {
- //不同Logger的個(gè)性初始化工作
- Logger logger = new FileLogger();
- return logger;
- }
- }
總結(jié)
工廠模式是創(chuàng)建型模式之一,日常使用比較多,每類產(chǎn)品都有對(duì)應(yīng)的一個(gè)工廠類。工廠模式把簡(jiǎn)單工廠的內(nèi)部邏輯遷移到了客戶端,當(dāng)需要對(duì)功能擴(kuò)展時(shí),只需要修改客戶端就OK了。