首頁 Java java教程 Java中工廠模式的圖文程式碼解析

Java中工廠模式的圖文程式碼解析

Aug 07, 2017 am 10:47 AM
java 程式碼 圖文

這篇文章主要介紹了工廠模式_動力節點Java學院整理的相關資料,需要的朋友可以參考下

# 簡單工廠模式

  


  當需要加法類別的時候,呼叫工廠類別的CreateOperate(),要指定製造的Product

  例如在大話設計模式P11給的運算工廠範例:

public static Operation createOperate(string operate)
{
Operation oper = null;
12
switch (operate)
{
case "+":
{
oper = new OperationAdd();
break;
}
case "-":
{
oper = new OperationSub();
break;
}
case "*":
{
oper = new OperationMul();
break;
}
case "/":
{
oper = new Operationp();
break;
}
}
return oper;
}
}
登入後複製

  呼叫工廠,需要createOperator("/"),就能傳回除法運算子。

  優點:客戶端不需要修改程式碼。

  缺點: 當需要增加新的運算類的時候,不僅需新加運算類,還要修改工廠類,違反了開閉原則。

 

 工廠方法模式


  UML類別圖如下:

  

#  這個和簡單工廠有區別,簡單工廠模式只有一個工廠,工廠方法模式對每個產品都有對應的工廠

  好處:增加一個運算類別(例如N次方類),只需要增加運算類別和相對應的工廠,兩個類,不需要修改工廠類。

  缺點:增加運算類,會修改客戶端程式碼,工廠方法只是把簡單工廠的內部邏輯判斷移到了客戶端進行。

   抽象工廠模式:

  UML類別圖如下:

  

#  從圖上可以看出這和工廠方法模式很相似,但是呢,有幾個區別:

  抽象工廠模式,一個具體工廠可以製造幾個產品,例如微軟工廠(相當於SqlserverFactory)可以製造微軟滑鼠(屬於滑鼠類,滑鼠類別下面有惠普滑鼠,微軟滑鼠等,相當於上圖中的IDepartment下面的SqlserverDepartment和AccessDepartment),也可以製造微軟鍵盤(屬於鍵盤類,鍵盤類別下面有惠普鍵盤,微軟鍵盤等,相當於上圖中的IUser下面的SqlserverUser和AccessUser)。

工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。 
  一个抽象工厂类,可以派生出多个具体工厂类。 
  每个具体工厂类只能创建一个具体产品类的实例。 
  抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 
  一个抽象工厂类,可以派生出多个具体工厂类。 
  每个具体工厂类可以创建多个具体产品类的实例。 

  区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
  工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
登入後複製

  優點:易於交換產品系列,例如Access和SQLServer資料庫之間切換。

  缺點:例如增加一個機箱產品,不僅需要添加三個類“機箱類,微軟機箱,惠普機箱”,還要修改惠普工廠,微軟工廠支持製造機箱。而增加一個聯想工廠的時候,只需要增加三個類,使用聯想工廠還是要修改客戶端程式碼的。 ######    在《大話設計模式》中,提出用簡單工廠模式改進抽象工廠模式的方法。 ######  #########  DataAccess的程式碼如下:######  #########   這樣,在DataAccess裡面直接指定資料庫(指定品牌),當需要需要換資料庫(or 品牌)的時候,修改DataAccess內的程式碼。 ######   當然可以用反射方法修改資料庫,這樣,只需要修改設定檔。就完美的改善了抽象工廠的缺點,而且在客戶端不用修改程式碼。 ######  反射實作:######  ##########要修改db屬性:############

以上是Java中工廠模式的圖文程式碼解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java 中的平方根 Java 中的平方根 Aug 30, 2024 pm 04:26 PM

Java 中的平方根

Java 中的完美數 Java 中的完美數 Aug 30, 2024 pm 04:28 PM

Java 中的完美數

Java 中的隨機數產生器 Java 中的隨機數產生器 Aug 30, 2024 pm 04:27 PM

Java 中的隨機數產生器

Java中的Weka Java中的Weka Aug 30, 2024 pm 04:28 PM

Java中的Weka

Java 中的阿姆斯壯數 Java 中的阿姆斯壯數 Aug 30, 2024 pm 04:26 PM

Java 中的阿姆斯壯數

Java 中的史密斯數 Java 中的史密斯數 Aug 30, 2024 pm 04:28 PM

Java 中的史密斯數

Java Spring 面試題 Java Spring 面試題 Aug 30, 2024 pm 04:29 PM

Java Spring 面試題

突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

突破或從Java 8流返回?

See all articles