设计模式学习(四)工厂模式
文章目錄
- 介紹
- 類圖說明
- 代碼示例
- 應用場景
- 優缺點
- 優點
- 缺點
- 拓展
介紹
工廠模式(Factory Pattern)是 Java 中最常用的設計模式之一。這種類型的設計模式屬于創建型模式,它提供了一種創建對象的最佳方式。
在工廠模式中,我們在創建對象時不會對客戶端暴露創建邏輯,并且是通過使用一個共同的接口來指向新創建的對象。
舉個例子:你想要造一輛汽車,可以直接告訴工廠制造,然后去取車即可,而不用去管這輛汽車是怎么做出來的,以及這個汽車里面的具體實現。
類圖說明
圖中用了一個車工廠造車的例子來畫的一個類圖,首先定義一個Car接口,該接口定義兩個方法,一個getName()方法,另一個getColor()方法,分別定義三個車的種類,寶馬,奔馳,特斯拉去實現它。然后再定義一個造車的工廠,你告訴車工廠要造什么車,通過方法參數告訴它,那它就造什么車給你,所以對應到前面咱們舉的例子,這個就是工廠要做的事情,幫我們封裝好了造車是怎么實現出來的,而我們如果想要造車,造什么樣的車,通過FactoryPattern的main方法調用工廠類造對應的種類車即可。
代碼示例
接下來咱們看下具體的代碼示例:
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();} }造著類圖敲一遍進一步加深對工廠模式的理解。
應用場景
- 日志記錄器:記錄可能記錄到本地硬盤、系統事件、遠程服務器等,用戶可以選擇記錄日志到什么地方。
- 數據庫訪問,當用戶不知道最后系統采用哪一類數據庫,以及數據庫可能有變化時。
- 設計一個連接服務器的框架,需要三個協議,“POP3”、“IMAP”、“HTTP”,可以把這三個作為產品類,共同實現一個接口。
優缺點
優點
- 一個調用者想創建一個對象,只要知道其名稱就可以了。
- 擴展性高,如果想增加一個產品,只要擴展一個產品類就可以。
- 屏蔽產品的具體實現,調用者只關心產品的接口
缺點
每次增加一個產品時,都需要增加一個具體類,使得系統中類的個數大大增加,在一定程度上增加了系統的復雜度。
拓展
以上例子通過一個工廠同時造寶馬車,奔馳車,特斯拉,在現實生活中是不太現實的,那么我們可以將不同車的種類都各自拓展升級不同的工廠類出來,另外順便提一下可以替代單例模式,也就是說一個單例類不再自行實例化,交給工廠類提供反射的方法實例化,且保證每次實例化都是同一個對象即可。
這里拿一個《設計模式之禪》里的例子看一下:
總結
以上是生活随笔為你收集整理的设计模式学习(四)工厂模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 请叫我程序员!(一)
- 下一篇: 设计模式类图