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

歡迎訪問 生活随笔!

生活随笔

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

java

Java设计模式-工厂模式(3)抽象工厂模式

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

在Java設計模式-工廠模式(2)工廠方法模式 我們知道了工廠方法模式解決了簡單工廠模式中的缺陷,做到了滿足開閉原則,但是時代是進步的,進而又產生新的問題,工廠難道只能生產一種東西嗎。我們所見到的工廠大都都是綜合性的。所以就有了抽象工廠模式。


放張圖舒緩一下心情。

Java設計模式-工廠模式(3)抽象工廠模式

    • 一、前言
      • 1)概述:
      • 2)角色概述:
      • 3)前文
    • 二、代碼實現
      • 1)抽象產品及具體產品:
      • 2)抽象工廠 及具體工廠
      • 3)測試
      • 4)優缺點:
      • 5)使用場景:
    • 三、自言自語

一、前言

1)概述:

  • 抽象工廠模式(Abstract Factory Pattern)隸屬于設計模式中的創建型模式,用于產品族的構建。抽象工廠是所有形態的工廠模式中最為抽象和最具一般性的一種形態。抽象工廠是指當有多個抽象角色時使用的一種工廠模式。抽象工廠模式可以向客戶端提供一個接口,使客戶端在不必指定產品的具體情況下,創建多個產品族中的產品對象。
  • 工廠模式中的每一個形態都是針對一定問題的解決方案,工廠方法針對的是多個產品系列結構;而抽象工廠模式針對的是多個產品族結構,一個產品族內有多個產品系列。
  • 抽象工廠模式相對于工廠方法模式來說,就是工廠方法模式是針對一個產品系列的,而抽象工廠模式是針對多個產品系列的,即工廠方法模式是一個產品系列一個工廠類,而抽象工廠模式是多個產品系列一個工廠類
  • 如果客戶端需要創建一些產品結構,而這些產品結構又分別屬于不同的產品類別,則可以使用抽象工廠模式,抽象工廠模式中抽象工廠類負責定義創建對象的接口,具體這一系列對象的創建工作由實現抽象工廠的具體工廠類來完成。
  • 2)角色概述:

    抽象工廠模式中存在四種角色,分別是抽象工廠角色,具體工廠角色,抽象產品角色,具體產品角色。

    • 抽象工廠:提供了創建產品的接口,它包含多個創建產品的方法,可以創建多個不同等級的產品。
    • 具體工廠:主要是實現抽象工廠中的多個抽象方法,完成具體產品的創建。
    • 抽象產品:定義了產品的規范,描述了產品的主要特性和功能,抽象工廠模式有多個抽象產品。
    • 具體產品:實現了抽象產品角色所定義的接口,由具體工廠來創建,它 同具體工廠之間是多對一的關系。

    3)前文

    在這里再次上一篇文章中👉Java設計模式-工廠模式(2)工廠方法模式 中出現的問題再做一次擴展。

    原問題是:

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

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

    但是現在我們咖啡店進行擴張了。

    現咖啡店業務發生改變,不僅要生產咖啡還要生產甜點,如提拉米蘇、抹茶慕斯等,要是按照工廠方法模式,需要定義提拉米蘇類、抹茶慕斯類、提拉米蘇工廠、抹茶慕斯工廠、甜點工廠類,很容易發生類爆炸情況。其中拿鐵咖啡、美式咖啡是一個產品等級,都是咖啡;提拉米蘇、抹茶慕斯也是一個產品等級;拿鐵咖啡和提拉米蘇是同一產品族(也就是都屬于意大利風味),美式咖啡和抹茶慕斯是同一產品族(也就是都屬于美式風味)。

    所以這個案例可以使用抽象工廠模式實現。類圖如下:

    二、代碼實現

    1)抽象產品及具體產品:

    第一種產品:

    Coffee(第一種抽象產品類)、AmericanCoffee和LatteCoffee (具體產品類)

    public abstract class Coffee {public abstract void addMilk();public abstract void addSugar();public abstract String getName(); } 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 "拿鐵咖啡"; } }

    第二種產品:

    Dessert (第二種抽象產品 甜點) MatchaMousse、Tiramisu(具體產品類)

    public abstract class Dessert {public abstract void show(); } public class MatchaMousse extends Dessert{@Overridepublic void show() { System.out.println("抹茶慕斯"); } } public class Tiramisu extends Dessert{@Overridepublic void show() { System.out.println("提拉米蘇"); } }

    2)抽象工廠 及具體工廠

    DessertFactory (抽象工廠) AmericanDessertFactory 和(具體工廠)

    public interface DessertFactory {Coffee createCoffee();Dessert createDessert(); } public class AmericanDessertFactory implements DessertFactory {@Overridepublic Coffee createCoffee() { return new AmericanCoffee(); }@Overridepublic Dessert createDessert() { return new MatchaMousse(); } } public class ItalyDessertFactory implements DessertFactory {@Overridepublic Coffee createCoffee() { return new LatteCoffee(); }@Overridepublic Dessert createDessert() { return new Tiramisu(); } }

    3)測試

    public class Client {public static void main(String[] args) {// 想次美式東西// AmericanDessertFactory factory = new AmericanDessertFactory();// 想換成意大利風味,僅僅只需要換一個工廠類 其他的代碼無需改變ItalyDessertFactory factory= new ItalyDessertFactory();Coffee coffee = factory.createCoffee();Dessert dessert = factory.createDessert();System.out.println(coffee.getName());dessert.show();} }

    如果要加同一個產品族的話,只需要再加一個對應的工廠類即可,不需要修改其他的類。

    4)優缺點:

    抽象工廠模式除了具有工廠方法模式的優點外,其他主要優點如下。

    • 可以在類的內部對產品族中相關聯的多等級產品共同管理,而不必專門引入多個新的類來進行管理。
    • 當需要產品族時,抽象工廠可以保證客戶端始終只使用同一個產品的產品組。
    • 抽象工廠增強了程序的可擴展性,當增加一個新的產品族時,不需要修改原代碼,滿足開閉原則。

    其缺點是:當產品族中需要增加一個新的產品時,所有的工廠類都需要進行修改。增加了系統的抽象性和理解難度。

    使用抽象工廠模式一般要滿足以下條件。

    • 系統中有多個產品族,每個具體工廠創建同一族但屬于不同等級結構的產品。
    • 系統一次只可能消費其中某一族產品,即同族的產品一起使用。

    5)使用場景:

    如:輸入法換皮膚,一整套一起換。生成不同操作系統的程序。

    三、自言自語

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

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

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

    總結

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

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