設計模式 工廠方法模式與抽象工廠模式

2021-08-28 22:39:44 字數 3009 閱讀 6017

這兩天抽空學習一下設計模式,剛開始遇到工廠模式,感覺工廠方法模式和抽象工廠模式的區別有點模糊,看了之前的面試資料也是有點區分不清,於是查閱一些網上的資料和部落格,記錄一下。

1,工廠方法模式: 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,工廠方法使得乙個類的例項化延遲到了子類 

工廠方法在簡單工廠的基礎上再包了一層工廠,所有的工廠都是此工廠的子類。而產生物件的型別由子類工廠決定。(摘自別的部落格,**)

//定義上級工廠的介面

public inte***ce ifractory

//為每乙個類建立工廠

/** * 工廠方法 為每個物件生成乙個工廠類

*/public class addoperationfactory implements ifractory

}public class suboperationfactory implements ifractory

}public class muloperationfactory implements ifractory

}public class divoperationfactory implements ifractory

}//客戶端**

ifractory fractory = new addoperationfactory();

operation operation = fractory.generateoper();

operation.getresult(firstnum,secondnum);

---------------------

原文:

工廠方法把類的例項化推遲到其子類,由客戶端**決定選擇對應工廠類進行例項化。將判斷問題移到客戶端,但是如果工廠方法模式遇到需要更改產品線,只需要更改乙個工廠例項化物件即可,非常方便。

2.抽象工廠模式: 提供乙個建立一系列相關相互依賴物件的介面,而無需指定他們具體的類。抽象工廠為不同產品族的物件建立提供介面。 

使用場景:系統需要在不同產品族進行切換

/**

* @description 抽象工廠模式:最原始工廠

* @author xg

* @date 2018/10/11 10:02

*/public inte***ce ifactory

/**

* @description 鍵盤

* @author xg

* @date 2018/10/11 10:04

*/public inte***ce keyboard

/** * @description 滑鼠

* @author xg

* @date 2018/10/11 10:06

*/public inte***ce mouse

/**

* @description 羅技產品

* @author xg

* @date 2018/10/11 10:08

*/public class lgkeyboard implements keyboard

}/**

* @description 羅技產品

* @author xg

* @date 2018/10/11 10:09

*/public class lgmouse implements mouse

}/**

* @description 雷蛇產品

* @author xg

* @date 2018/10/11 10:10

*/public class lskeyboard implements keyboard

}/**

* @description 雷蛇產品

* @author xg

* @date 2018/10/11 10:12

*/public class lsmouse implements mouse

}

/**

* @description 羅技工廠 不同產品組使用同乙個工廠

* @author xg

* @date 2018/10/11 10:12

*/public class lgfactory implements ifactory

@override

public mouse createmouse()

}/**

* @description 雷蛇工廠

* @author xg

* @date 2018/10/11 10:13

*/public class lsfactory implements ifactory

@override

public mouse createmouse()

}

package factory_demo;

import factory_demo.product.keyboard;

import factory_demo.product.mouse;

/** * @description 抽象工廠模式測試 客戶端**

* @author xg

* @date 2018/10/11 10:16

*/public class factorytest

}

好處:①便於交換產品系列,具體工廠在**中一般只出現一次。這就使得改變應用的具體工廠很容易。

②能讓具體的建立物件例項和客戶端分離,客戶端是通過他們的抽象介面操作例項

缺點:不太易於拓展,如果需要自增功能,或者自增產品,則需要至少修改三個類,而且例項化的**是寫死在程式中的 , 這樣無法避免違背開放-關閉原則。

對於上述問題,可以通過配置檔案,結合反射的方式來解決。

自己理解還不是很到位,文字總結也是依照別人理解,只能對**有所意會,先記錄下來供以後補充和學習。

設計模式 工廠模式(工廠方法 抽象工廠)

1 工廠方法模式 factory method 定義乙個用於建立物件的介面,讓子類決定例項化哪個類。工廠方法使乙個類的例項化延遲到其子類。正如建立交通工具,可以通過不同的工廠方法建立所需的物件。類圖 對比 1 工廠方法在產品維度,即類圖中movable方向拓展比較方便,只需增加對應的類及相應的工廠方...

設計模式 工廠方法 抽象工廠模式

在業務邏輯中往往有需要建立物件的需求 如何將這部分邏輯封裝並且使得其能個適應於頻繁的變化呢?簡單工廠模式 將物件建立邏輯封裝隔離在簡單工廠類的方法中。簡單工廠的常見實現方式 1 簡單工廠類以及其建立物件的靜態方法 其客戶可以直接呼叫該類的靜態方法。2 簡單工廠類以及其建立物件的成員方法 其客戶 需要...

設計模式 工廠方法模式 抽象工廠模式

最近擠了擠時間出來看了下設計模式,汗!總算來總結點東東了,最近專案忙得暈頭轉向了啊t.t好了言歸正傳,開始總結。理論定義來一套 設計模式 design patterns 是一套被反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。使用設計模式是為了可重用 讓 更容易被他人理解 保證 可靠性。設計...