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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java设计模式-工厂模式(2)工厂方法模式

發布時間:2025/3/19 java 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java设计模式-工厂模式(2)工厂方法模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在Java設計模式-工廠模式(1)簡單工廠模式 中我們介紹了簡單工廠模式,提到了簡單工廠模式違背了開閉原則,而“工廠方法模式”是對簡單工廠模式的進一步抽象化,其好處是可以使系統在不修改原來代碼的情況下引進新的產品,即滿足開閉原則。


地點: 湖南永州市藍山縣舜河村
作者:用心笑* 😁

Java設計模式-工廠模式(2)工廠方法模式

  • 一、前言
      • 1)概述:
      • 2)角色結構:
      • 3)類圖關系:
    • 二、代碼實現
      • 1)Coffce咖啡抽象類(產品抽象類)
      • 2)AmericanCoffee 、LatteCoffee類(具體產品類)
      • 3)CoffeeFactory(抽象工廠類)
      • 4)AmericanCoffeeFactory、LatteCoffeeFactory類 (具體實現工廠)
      • 5)咖啡店(用具體產品的客戶)
      • 6)測試
    • 三、總結
      • 3.1、小結:
      • 3.2、優點:
      • 3.3、缺點:
      • 3.4、應用場景:
    • 四、自言自語

一、前言

1)概述:

工廠方法(Factory Method)模式的意義是定義一個創建產品對象的工廠接口,將實際創建工作推遲到子類當中。核心工廠類不再負責產品的創建,這樣核心類成為一個抽象工廠角色,僅負責具體工廠子類必須實現的接口,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠角色的情況下引進新的產品。

工廠方法模式是簡單工廠模式的衍生,解決了許多簡單工廠模式的問題。首先完全實現‘開-閉 原則’,實現了可擴展。其次更復雜的層次結構,可以應用于產品結果復雜的場合。

工廠方法模式對簡單工廠模式進行了抽象。有一個抽象的Factory類(可以是抽象類和接口),這個類將不再負責具體的產品生產,而是只制定一些規范,具體的生產工作由其子類去完成。在這個模式中,工廠類和產品類往往可以依次對應。即一個抽象工廠對應一個抽象產品,一個具體工廠對應一個具體產品,這個具體的工廠就負責生產對應的產品。

2)角色結構:

抽象工廠(Creator):是工廠方法模式的核心,與應用程序無關。任何在模式中創建的對象的工廠類必須實現這個接口。

具體工廠(Concrete Creator):這是實現抽象工廠接口的具體工廠類,包含與應用程序密切相關的邏輯,并且受到應用程序調用以創建產品對象。在上圖中有兩個這樣的角色:BulbCreator與TubeCreator。

抽象產品(Product):工廠方法模式所創建的對象的超類型,也就是產品對象的共同父類或共同擁有的接口。在上圖中,這個角色是Light。

具體產品(Concrete Product):這個角色實現了抽象產品角色所定義的接口。某具體產品有專門的具體工廠創建,它們之間往往一一對應。

博主自語: 說人話就是往上再抽取一層(所以果然是沒有什么是加一層不能解決的,一層不行就加兩層)😁


還是上次那個問題:

需求:設計一個咖啡店點餐系統。

設計一個咖啡類(Coffee),并定義其兩個子類(美式咖啡【AmericanCoffee】和拿鐵咖啡【LatteCoffee】);再設計一個咖啡店類(CoffeeStore),咖啡店具有點咖啡的功能。


3)類圖關系:

上一文中的簡單工廠類圖:

工廠方法類圖:

之前在簡單工廠模式中,CoffeeStore和SimpleCoffeeFactory工廠直接進行關聯,那個時候在SimpleCoffeeFactory簡單工廠中還需要做一些具體的操作,但是在這里再次進行了一個抽取,將工廠分為了兩層,一是抽象工廠,二是具體的實現工廠。再一次做了一個解耦操作。

想了解簡單工廠模式點👉Java設計模式-工廠模式(1)簡單工廠模式

具體還是看代碼實現吧,在看文末比較總結吧😁

二、代碼實現

1)Coffce咖啡抽象類(產品抽象類)

public abstract class Coffee {public abstract void addMilk();public abstract void addSugar();public abstract String getName(); }

2)AmericanCoffee 、LatteCoffee類(具體產品類)

public class AmericanCoffee extends Coffee {@Overridepublic void addMilk() { System.out.println("給咖啡加奶"); }@Overridepublic void addSugar() { System.out.println("給咖啡加糖"); }@Overridepublic String getName() { return "美式咖啡"; } } public class LatteCoffee extends Coffee {@Overridepublic void addMilk() { System.out.println("給咖啡加奶"); }@Overridepublic void addSugar() { System.out.println("給咖啡加糖"); }@Overridepublic String getName() { return "拿鐵咖啡"; } }

3)CoffeeFactory(抽象工廠類)

public interface CoffeeFactory {Coffee createCoffee(); }

4)AmericanCoffeeFactory、LatteCoffeeFactory類 (具體實現工廠)

public class AmericanCoffeeFactory implements CoffeeFactory {@Overridepublic Coffee createCoffee() { return new AmericanCoffee(); } } public class LatteCoffeeFactory implements CoffeeFactory {@Overridepublic Coffee createCoffee() { return new LatteCoffee(); } }

5)咖啡店(用具體產品的客戶)

public class CoffeeStore {private CoffeeFactory factory;public CoffeeStore(CoffeeFactory factory) { this.factory = factory; }public Coffee orderCoffee(String type) {Coffee coffee = factory.createCoffee();coffee.addMilk();coffee.addSugar();return coffee;} }

6)測試

我們現在來測試一下

public class Client {public static void main(String[] args) {CoffeeStore coffeeStore = new CoffeeStore(new AmericanCoffeeFactory());Coffee americano = coffeeStore.orderCoffee("americano");System.out.println(americano.getName());/*** 給咖啡加奶* 給咖啡加糖* 美式咖啡*/} }

三、總結

3.1、小結:

從上面的代碼來看,這完美的解決了簡單工廠方法中所違背的”開閉原則“,在這里如果需要再增加新的產品,只需要再寫一個具體的實現工廠類就可以了,而不需要對原代碼進行修改。

工廠方法模式是簡單工廠模式的進一步抽象。由于使用了多態性,工廠方法模式保持了簡單工廠模式的優點,而且克服了它的缺點。

3.2、優點:

  • 用戶只需要知道具體工廠的名稱就可得到所要的產品,無須知道產品的具體創建過程。
  • 靈活性增強,對于新產品的創建,只需多寫一個相應的具體工廠類。無須對原工廠進行任何修改,滿足開閉原則
  • 典型的解耦框架。高層模塊只需要知道產品的抽象類,無須關心其他實現類,滿足迪米特法則、依賴倒置原則和里氏替換原則。

3.3、缺點:

  • 類的個數容易過多,增加復雜度
  • 增加了系統的抽象性和理解難度
  • 抽象產品只能生產一種產品,此弊端可使用抽象工廠模式解決。(下一篇文章😀持續更新中)

3.4、應用場景:

  • 客戶只知道創建產品的工廠名,而不知道具體的產品名。如 TCL 電視工廠、海信電視工廠等。
  • 創建對象的任務由多個具體子工廠中的某一個完成,而抽象工廠只提供創建產品的接口。
  • 客戶不關心創建產品的細節,只關心產品的品牌

四、自言自語

我也不知道文章寫出來是有用還是無用,只是想做一個分享。希望大家能夠喜歡并且在這里能有收獲。

你好啊,要天天開心哦。下篇文章再見。

此系列還在持續更新中…👉 我一定還會回來的。😁

總結

以上是生活随笔為你收集整理的Java设计模式-工厂模式(2)工厂方法模式的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产第一页av| 夜晚福利视频 | 雪花飘电影在线观看免费高清 | 91精品综合| 亚洲色图88 | 亚洲成在线| 欧美中文在线观看 | 性xxxx18| 天天干天天干天天干天天 | 春色av| 一级大片免费观看 | 大又大又粗又硬又爽少妇毛片 | 少妇精品偷拍高潮白浆 | 伦理片波多野结衣 | 日韩av网站在线播放 | 日本色网址 | av中文字幕免费 | 欧美综合图区 | 成人午夜激情影院 | 亚洲国产免费av | 亚洲乱码精品 | 亚洲综合五月 | 99久久久国产精品无码性 | 亚洲精品乱码久久久久久蜜桃91 | 亚洲性欧美 | 欧美日韩精品三区 | 无码精品一区二区三区在线 | 国产视频1区 | 久久噜噜色综合一区二区 | www九色 | 国产一线天粉嫩馒头极品av | 不卡在线播放 | 综合免费视频 | 一级a毛片 | 青青草成人av | 神马久久网 | 亚洲精品视频免费看 | 天天看天天色 | 强行挺进皇后紧窄湿润小说 | 久久精品99北条麻妃 | 欧美精品aa | 成人深夜福利 | www.av在线免费观看 | 日本全黄裸体片 | 午夜视频在线免费 | 激烈娇喘叫1v1高h糙汉 | 一区二区三区午夜 | 天天插天天狠 | 亚洲天堂不卡 | 中文字幕av一区二区三区人妻少妇 | 性欧美丰满熟妇xxxx性 | av毛片观看| 国产传媒一级片 | 国产精品久久久久久免费 | 久久亚洲aⅴ无码精品 | 国产精品一区二区av白丝下载 | 亚洲av综合av一区二区三区 | 女人脱裤子让男人捅 | 亚洲免费观看高清完整 | 午夜精| 欧美成人黄 | 神马久久久久久久久 | 中文字字幕在线中文乱码 | 日本一区不卡 | 亚洲精品国产精品国自产观看浪潮 | 91插插插插插插插 | 青青青网 | 一二三区不卡 | 国产日韩欧美不卡 | 国产只有精品 | 亚洲色图制服诱惑 | 久久久久久午夜 | 欧美激情啪啪 | 字幕网在线 | 国产午夜福利精品 | 激情 亚洲 | 日本亚洲一区二区三区 | 久草在在线 | 久久综合色网 | xxx毛片 | 国产无码精品在线播放 | 国产人成精品 | 中文字幕无码精品亚洲 | 欧洲av在线 | 黄色片久久 | 一级α片免费看刺激高潮视频 | 日韩激情啪啪 | 97精品人妻一区二区三区在线 | 少妇人妻偷人精品无码视频新浪 | 深田咏美av在线 | 波多野结衣中文字幕一区二区 | 中文字幕av一区二区三区人妻少妇 | 日韩一级中文字幕 | 婷婷调教口舌奴ⅴk | 影音先锋黄色网址 | 欧美日韩免费做爰视频 | 免费网站看av | 国产一区二区三区电影在线观看 | 午夜久久一区 |