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