设计模式学习(四)工厂模式
文章目錄
- 介紹
- 類圖說明
- 代碼示例
- 應(yīng)用場景
- 優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn)
- 缺點(diǎn)
- 拓展
介紹
工廠模式(Factory Pattern)是 Java 中最常用的設(shè)計模式之一。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。
在工廠模式中,我們在創(chuàng)建對象時不會對客戶端暴露創(chuàng)建邏輯,并且是通過使用一個共同的接口來指向新創(chuàng)建的對象。
舉個例子:你想要造一輛汽車,可以直接告訴工廠制造,然后去取車即可,而不用去管這輛汽車是怎么做出來的,以及這個汽車?yán)锩娴木唧w實現(xiàn)。
類圖說明
圖中用了一個車工廠造車的例子來畫的一個類圖,首先定義一個Car接口,該接口定義兩個方法,一個getName()方法,另一個getColor()方法,分別定義三個車的種類,寶馬,奔馳,特斯拉去實現(xiàn)它。然后再定義一個造車的工廠,你告訴車工廠要造什么車,通過方法參數(shù)告訴它,那它就造什么車給你,所以對應(yīng)到前面咱們舉的例子,這個就是工廠要做的事情,幫我們封裝好了造車是怎么實現(xiàn)出來的,而我們?nèi)绻胍燔?#xff0c;造什么樣的車,通過FactoryPattern的main方法調(diào)用工廠類造對應(yīng)的種類車即可。
代碼示例
接下來咱們看下具體的代碼示例:
public interface Car {void getName();void getColor(); } public class BMW implements Car{@Overridepublic void getName() {System.out.println("我是寶馬");}@Overridepublic void getColor() {System.out.println("我是黑色車");} } public class Benz implements Car{@Overridepublic void getName() {System.out.println("我是奔馳");}@Overridepublic void getColor() {System.out.println("我是綠色車");} } public class CarFactory {public static <T extends Car> T createCar(Class<T> c){Car car = null;try {car = (Car) Class.forName(c.getName()).newInstance();} catch (Exception e) {System.out.println("造車失敗");}return (T)car;}} public class FactoryPattern {public static void main(String[] args){BMW bmw = CarFactory.createCar(BMW.class);bmw.getName();bmw.getColor();} }造著類圖敲一遍進(jìn)一步加深對工廠模式的理解。
應(yīng)用場景
- 日志記錄器:記錄可能記錄到本地硬盤、系統(tǒng)事件、遠(yuǎn)程服務(wù)器等,用戶可以選擇記錄日志到什么地方。
- 數(shù)據(jù)庫訪問,當(dāng)用戶不知道最后系統(tǒng)采用哪一類數(shù)據(jù)庫,以及數(shù)據(jù)庫可能有變化時。
- 設(shè)計一個連接服務(wù)器的框架,需要三個協(xié)議,“POP3”、“IMAP”、“HTTP”,可以把這三個作為產(chǎn)品類,共同實現(xiàn)一個接口。
優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
- 一個調(diào)用者想創(chuàng)建一個對象,只要知道其名稱就可以了。
- 擴(kuò)展性高,如果想增加一個產(chǎn)品,只要擴(kuò)展一個產(chǎn)品類就可以。
- 屏蔽產(chǎn)品的具體實現(xiàn),調(diào)用者只關(guān)心產(chǎn)品的接口
缺點(diǎn)
每次增加一個產(chǎn)品時,都需要增加一個具體類,使得系統(tǒng)中類的個數(shù)大大增加,在一定程度上增加了系統(tǒng)的復(fù)雜度。
拓展
以上例子通過一個工廠同時造寶馬車,奔馳車,特斯拉,在現(xiàn)實生活中是不太現(xiàn)實的,那么我們可以將不同車的種類都各自拓展升級不同的工廠類出來,另外順便提一下可以替代單例模式,也就是說一個單例類不再自行實例化,交給工廠類提供反射的方法實例化,且保證每次實例化都是同一個對象即可。
這里拿一個《設(shè)計模式之禪》里的例子看一下:
總結(jié)
以上是生活随笔為你收集整理的设计模式学习(四)工厂模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 请叫我程序员!(一)
- 下一篇: asp.net ajax控件工具集 Au