日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

创建型模式---工厂模式

發布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 创建型模式---工厂模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

從簡單到復雜有簡單工廠模式-->工廠方法模式-->抽象工廠模式

簡單工廠模式(Simple Factory Pattern)

定義

又稱為靜態工廠方法(Static Factory Method)模式,它屬于類創建型模式。在簡單工廠模式中,可以根據參數的不同返回不同類的實例。簡單工廠模式專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。

產生背景

當一個模塊只需要一個工廠類,沒必要把工廠類也抽象出來的時候,使用靜態方法就行。就像規模小的時候,各種產品都在一個工廠里混著生產,有點類似小作坊。

UML圖

代碼

public class SimpleDrinkFactory {public static <T extends Drink> T getDrink(Class<T> c) {//定義一個飲料Drink drink = null;try {drink = (Drink) Class.forName(c.getName()).newInstance();} catch (Exception e) {System.out.println("生產飲料失敗!");}return (T) drink;} }public class SimpleDrinkFactoryTest {@Testpublic void test() {Drink wine = SimpleDrinkFactory.getDrink(Wine.class);wine.getName();Drink milk = SimpleDrinkFactory.getDrink(Milk.class);milk.getName();Drink juice = SimpleDrinkFactory.getDrink(Juice.class);juice.getName();} }

使用場景:

  • 日志記錄器:記錄可能記錄到本地硬盤、系統事件、遠程服務器等,用戶可以選擇記錄日志到什么地方。
  • 數據庫訪問,當用戶不知道最后系統采用哪一類數據庫,以及數據庫可能有變化時。
  • 設計一個連接服務器的框架,需要三個協議,"POP3"、"IMAP"、"HTTP",可以把這三個作為產品類,共同實現一個接口。
  • 工廠方法模式(Factory Method Pattern)

    意圖

    定義一個用于創建對象的接口,讓子類決定實例化哪一個類。 Factory Method使一個類的實例化延遲到其子類。

    適用性

    在下列情況下可以使用 Factory Method模式:

    • 當一個類不知道它所必須創建的對象的類的時候。
    • 當一個類希望由它的子類來指定它所創建的對象的時候。
    • 當類將創建對象的職責委托給多個幫助子類中的某一個,并且你希望將哪一個幫助子類是代理者這一信息局部化的時候。

    結構

    參與者

    • P r o d u c t( D o c u m e n t )
      -- 定義工廠方法所創建的對象的接口。
    • C o n c r e t e P r o d u c t(M y D o c u m e n t)
      -- 實現P r o d u c t接口。
    • C r e a t o r(A p p l i c a t i o n)
      -- 聲明工廠方法,該方法返回一個 P r o d u c t類型的對象。 C r e a t o r也可以定義一個工廠方法的缺省實現,它返回一個缺省的 C o n c r e t e P r o d u c t對象。
      -- 可以調用工廠方法以創建一個 P r o d u c t對象。
    • C o n c r e t e C r e a t o r(M y A p p l i c a t i o n)
      -- 重定義工廠方法以返回一個 C o n c r e t e P r o d u c t實例。

    協作

    • Creator依賴于它的子類來定義工廠方法,所以它返回一個適當的 C o n c r e t e P r o d u c t實例。

    抽象工廠模式(Abstract Factory Pattern)

    意圖

    提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。重點在于在于一系列、相關(相互依賴)兩個詞。

    結 構

    適用性

    在以下情況可以使用 Abstract Factory模式

    • 一個系統要獨立于它的產品的創建、組合和表示時。
    • 一個系統要由多個產品系列中的一個來配置時。
    • 當你要強調一系列相關的產品對象的設計以便進行聯合使用時。
    • 當你提供一個產品類庫,而只想顯示它們的接口而不是實現時。

    舉例

    知乎上有個很好的例子,就是遠程武器的例子,比如手槍、步槍、打炮、弩。這些武器的生產工廠不止生產武器,同時生產配套的彈藥(箭矢),這個注意一個詞配套,也就是這些彈藥和武器是配套使用的,不能混著來,手槍不能用步槍子彈,步槍也不能用手槍子彈,大炮就更不用說了。而對于客戶端來說只需要工廠就行,不需要關系這些武器和這些彈藥如何搭配,把搭配組合的事兒讓工廠管了。客戶端只需要給抽象工廠引用替換具體的工廠實例,就能從工廠中獲取到相應的武器和對應的彈藥,而不會混亂。

    區別

    和工廠方法模式的區別在于,工廠方法模式只關心單一產品的生產,而抽象工廠模式關心的是整體配套,工廠方法模式有些類似工廠中的生產線,只關心這條生產線是生產武器還是彈藥。

    工廠模式并沒有簡單化代碼,而是封裝了邏輯,降低客戶端的使用成本和修改的成本,并沒有降低開發成本。

    轉載于:https://www.cnblogs.com/waynelsh/p/8870735.html

    總結

    以上是生活随笔為你收集整理的创建型模式---工厂模式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。