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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

简单工厂模式(Simple Factory Pattern)

發布時間:2025/3/17 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简单工厂模式(Simple Factory Pattern) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

  • 學習難度:★★☆☆☆
  • 使用頻率:★★★☆☆

學會它。

開始吧

模式名稱

中文:簡單工廠模式

English: Simple Factory Pattern

含義:簡單工廠模式專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。因為在簡單工廠模式中用于創建實例的方法是靜態(static)方法,因此簡單工廠模式又被稱為靜態工廠方法(Static Factory Method)模式,它屬于類創建型模式。

問題

何時使用

簡單工廠模式,我的理解是:某類產品的成產線。通過設置不同的參數,生產出同一類別下不同形態的產品。

舉個例子:

手機生產線上,通過設置不同的參數既可以生成小米手機,也可以生成IPhone手機。


存在的問題

優點

工廠類是整個模式的關鍵.包含了必要的邏輯判斷,根據外界給定的信息,決定究竟應該創建哪個具體類的對象.通過使用工廠類,外界可以從直接創建具體產品對象的尷尬局面擺脫出來,僅僅需要負責“消費”對象就可以了。而不必管這些對象究竟如何創建及如何組織的.明確了各自的職責和權利,有利于整個軟件體系結構的優化。

缺點

由于工廠類集中了所有實例的創建邏輯,違反了高內聚責任分配原則,將全部創建邏輯集中到了一個工廠類中;它所能創建的類只能是事先考慮到的,如果需要添加新的類,則就需要改變工廠類了。
當系統中的具體產品類不斷增多時候,可能會出現要求工廠類根據不同條件創建不同實例的需求.這種對條件的判斷和對具體產品類型的判斷交錯在一起,很難避免模塊功能的蔓延,對系統的維護和擴展非常不利;
這些缺點在工廠方法模式中得到了一定的克服。

解決方案

先看 UML 圖:

SimpleFactoryPattern UML


通過 Factory 類的 createProduct() 方法我們來得到 產品 A,產品 B 或者產品 C 的實例。

我用熟悉的 java 來實現

  • 需求:使用不同的統計圖展示數據(eg: 折線圖,餅狀圖,柱形圖)
  • 分析:各個圖形展示的數據是一樣,只是展示方式不一樣。且功能都是展示數據給用戶分析。擁有共同的設置數據等一些方法。
  • try code ↓

1.抽取圖表都有共同的方法 如:setData()

abstract class Chart {public void setData(Map<String, Float> data) {// do something same}public abstract void showChart(); }復制代碼

2.創建三個圖表的實現類

// 線形圖 public class LineChart extends Chart {@Overridepublic void setData(Map<String, Float> data) {super.setData(data);}@Overridepublic void showChart() {// do somethingSystem.out.println("看到這句話就假裝看到了折線圖 ^^!");} }復制代碼// 餅狀圖 public class PieChart extends Chart {@Overridepublic void setData(Map<String, Float> data) {super.setData(data);}@Overridepublic void showChart() {// do something}}復制代碼// 柱狀圖 public class Histogram extends Chart {@Overridepublic void setData(Map<String, Float> data) {super.setData(data);}@Overridepublic void showChart() {// do something} }復制代碼

3.創建我們的圖表工廠來生成圖表

public class ChartFactory {public static final int FLAG_LINE_CHART = 0;public static final int FLAG_PIE_CHART = 1;public static final int FLAG_HISTOGRAM_CHART = 2;public static Chart getChart(int flag) {switch (flag) {case FLAG_LINE_CHART:return new LineChart();case FLAG_PIE_CHART:return new PieChart();case FLAG_HISTOGRAM_CHART:return new Histogram();default:return null;}} }復制代碼

最后再來試試效果

@Test public void SimpleFactoryTest() {Chart chart = ChartFactory.getChart(ChartFactory.FLAG_LINE_CHART);if (chart != null)chart.showChart();}復制代碼

測試結果:看到一條綠杠,并假裝看到了 折線圖



突然,我還想看看條形圖。那就很簡單,在新建個條形圖的類。然后修改一下工廠類ChartFactory??此坪唵?#xff0c;但是產品多的情況下每次都要去修改工廠類無疑會造成維護困難。邏輯復雜。代碼臃腫,這時我們便可以使用反射來結束這個困惑。

我這樣寫

public static Chart getChart(String flag) {String className = getChartProperties(flag);Chart chart = null;try {chart = (Chart) Class.forName(className).newInstance();} catch (Exception e) {e.printStackTrace();}return chart;} // 這里為了避免輸入 包名+類名 實在是麻煩。我們就通過配置文件的方法來簡化這些操作private static String getChartProperties(String flag) {Properties properties = new Properties();try {properties.load(new FileInputStream("chart.properties"));} catch (IOException e) {e.printStackTrace();}if (properties != null) {return properties.getProperty(flag);}return null;}復制代碼

這是配置文件 chart.properties

# 折線圖 lineChart=com.liumeng.designpattern.smpfactory.LineChart # 餅圖 pieChart=com.liumeng.designpattern.smpfactory.PieChart # 柱狀圖 histogram=com.liumeng.designpattern.smpfactory.Histogram # 條形圖 barChart=com.liumeng.designpattern.smpfactory.BarChart復制代碼

效果

你會有更好的方法,更巧妙的用法。加油。
由于簡單工廠很容易違反高內聚責任分配原則,因此一般只在很簡單的情況下應用。
至此,簡單工廠模式就能明白了吧。


更新中:
1. 什么是設計模式
2. 單例模式
3. 簡單工廠模式
GitHub匯總:這里總是最新的
看完給個star鼓勵一下

總結

以上是生活随笔為你收集整理的简单工厂模式(Simple Factory Pattern)的全部內容,希望文章能夠幫你解決所遇到的問題。

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