一天一個設計模式:抽象方法模式
為什麼引入抽象工廠模式?
或者說抽象工廠模式與工廠方法模式的區別?
工廠方法模式針對的是一類產品的等級結構,而抽象工廠模式針對的是多個產品等級結構(一個產品族)。
引入概念:產品族與產品等級
產品族:指在不同的產品等級結構中,功能相關聯的產品組成的家族。
產品等級:同類產品的不同產品區分。
抽象工廠的作用:
就是建立不同產品等級,但屬於同一產品族的產品
那抽象工廠的定義:
建立不同產品等級,但屬於同一產品族的產品的工廠的抽象。
那麼具體的實現工廠就對應了不同的產品等級下的同一產品族的所有產品。
抽象工廠模式結構:
抽象工廠定義了一個產品族的生產功能,然後交由具體的產品工廠去生產。
注:抽象工廠的介面不是隨意堆砌的,而是相互關聯或依賴的方法整合在一起的。
例子如下圖:以電腦為例
優點:
分離介面與實現
使用抽象工廠來建立所需要的物件,客戶端僅僅是面向介面來程式設計,客戶端可以實現從產品中解耦。
使切換產品族變得更容易
因為一個具體的工廠實現代表一個產品族,僅替換實現工廠即可切換。
缺點:
不易擴充套件
產品族如果有新產品出現,就需要對抽象工廠進行修改,這會導致需要更新所有的工廠類。
例項:
抽象工廠:
public interface AbstractFactory { /** * 建立CPU物件 * @return CPU物件 */ public Cpu createCpu();View Code/** * 建立主機板物件 * @return 主機板物件 */ public Mainboard createMainboard(); }
英特爾工廠:
public class IntelFactory implements AbstractFactory { @Override public Cpu createCpu() { // TODO Auto-generated method stub return new IntelCpu(755); } @OverrideView Codepublic Mainboard createMainboard() { // TODO Auto-generated method stub return new IntelMainboard(755); } }
amd工廠:
public class AmdFactory implements AbstractFactory { @Override public Cpu createCpu() { // TODO Auto-generated method stub return new IntelCpu(938); } @Override public Mainboard createMainboard() { // TODO Auto-generated method stub return new IntelMainboard(938); } }View Code
裝機人員:
public class ComputerEngineer { /** * 定義組裝機需要的CPU */ private Cpu cpu = null; /** * 定義組裝機需要的主機板 */ private Mainboard mainboard = null; public void makeComputer(AbstractFactory af){ /** * 組裝機器的基本步驟 */ //1:首先準備好裝機所需要的配件 prepareHardwares(af); //2:組裝機器 //3:測試機器 //4:交付客戶 } private void prepareHardwares(AbstractFactory af){ //這裡要去準備CPU和主機板的具體實現,為了示例簡單,這裡只准備這兩個 //可是,裝機工程師並不知道如何去建立,怎麼辦呢? //直接找相應的工廠獲取 this.cpu = af.createCpu(); this.mainboard = af.createMainboard(); //測試配件是否好用 this.cpu.calculate(); this.mainboard.installCPU(); } }View Code
測試程式碼:
public class Client { public static void main(String[]args){ //建立裝機工程師物件 ComputerEngineer cf = new ComputerEngineer(); //客戶選擇並建立需要使用的產品物件 AbstractFactory af = new IntelFactory(); //告訴裝機工程師自己選擇的產品,讓裝機工程師組裝電腦 cf.makeComputer(af); } }View Code
最後補充一句:
看到i7-9900k的售價,英特爾真是騙傻子錢多有恃無恐。幹他媽的英特爾,amd加油!!!
參考連結:
https://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html
相關推薦
一天一個設計模式:抽象方法模式
為什麼引入抽象工廠模式? 或者說抽象工廠模式與工廠方法模式的區別? 工廠方法模式針對的是一類產品的等級結構,而抽象工廠模式針對的是多個產品等級結構(一個產品族)。 引入概念:產品族與產品等級 產品族:指在不同的產品等級結構中,功能相關聯的產品組成的家族。產品等級:同類產品的不同產品區分。 抽象工廠的作用:
一天一個設計模式:工廠方法模式
工廠方法模式: 定義一個生產產品物件的工廠介面,將建立生產產品的工廠的工作交給子類實現。 隨著實際需要的工廠數量增加,簡單工廠模式體積會迅速膨脹,程式碼迅速臃腫嚴重。 補充:工廠方法模式是針對一類產品的工廠 所以為了程式碼的可閱讀下與可維護性,也做到不同的業務有一定的隔離,將工廠的功能抽象出來成
一天一個設計模式:模板方法模式
概念: 模板方法模式是類的行為模式,準備一個抽象類,將部分邏輯以具體方法以及具體建構函式的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。這就是模板方法模式的意思。 結構: 模板方法模式中,抽象類負責定義整個的邏輯框架,
一天一個設計模式:介面卡模式
概念: 介面卡模式是把一個類的介面變成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。 用途: 就像插頭轉換器,之前入了switch港版,插頭是英式的,還好附贈一個插頭轉換器,介面卡就相當於這個轉換器。 種類: 分為類的介面卡與物件的介面卡兩種
一天一個設計模式:裝飾者模式
概念: 裝飾者模式又稱為包裝(wrapper)模式。裝飾者模式對客戶端透明的方式擴充套件物件的功能,是繼承關係的一個替代方案。 結構: 裝飾者模式以透明的方式給一個物件附加上更多的責任,換而言之,客戶端並不會覺得物件在裝飾前後有什麼不同,裝飾者模式可以在不使用創造更多子類的情況下,將物件的功能拓展。
一天一個設計模式:策略模式
概念: 策略模式屬於物件的行為模式,其用意是針對一組演算法,將每一個演算法封裝到具有共同介面的獨立的類中,從而使得它們可以相互替換。策略模式使得演算法可以在不影響客戶端的情況下變化。 結構: 環境(Context)角色:持有一個Strategy的引用。 抽象策略(Strategy)角色:這是一個抽象角色
一天一個設計模式:建造模式
概念: 建造模式是物件的建立模式,建造模式可以將一個產品的內部表象(個人理解,可以稱為元件)與產品的生產分割開來,從而可以使一個建造過程生產出來具有不同內部表象的產品物件。 概念: 產品的內部表象: 產品不同組成成分構成(元件)這些零件可以是物件,也可以是非物件,稱為內部表象(internal re
一天一個設計模式:單例模式
概念: 作為物件的建立模式,單例模式確保某一個類只有一個例項,而且自行例項化,並向整個系統提供這個例項。 特點: 1.單例類只能有一個例項 2.單例類必須建立自己的唯一例項 3.單例類必須給其他所有物件提供這一例項。 餓漢式單例類 public class EagerSingleton {
一天一個設計模式(五) - 適配器模式(Adapter)
p s func 靈活性 nsh ans target 多線程 isp pattern 前言 適配器模式把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作。 適配器模式的用途 最經典的就是電器的例子,筆記本電腦的插
一天一個設計模式(四) - 原型模式(Prototype)
管理員 ans rip prototype register 性能 除了 func comm 前言 原型模式屬於對象的創建模式。通過給出一個原型對象來指明所有創建的對象的類型,然後用這個原型對象提供的復制辦法創建出更多同類型的對象。 原型模式的結構 原型模式要求對象實現
一天一個設計模式(一) - 總體概述
享元 關註 責任鏈 分布式 分享圖片 模板方法 mage upload 抽象工廠 前言 最近在對設計模式進行了一系列總結,本文將給大家關於設計模式的一個整體的介紹。 正文 1. 定義 設計模式是某類特定問題的代碼設計解決方案,是一套代碼設計的經驗總結。 2. 作用 提高
設計模式:工廠方法模式與抽象工廠模式
這兩天抽空學習一下設計模式,剛開始遇到工廠模式,感覺工廠方法模式和抽象工廠模式的區別有點模糊,看了之前的面試資料也是有點區分不清,於是查閱一些網上的資料和部落格,記錄一下。 1,工廠方法模式: 定義一個用於建立物件的介面,讓子類決定例項化哪一個類,工廠方法使得一個類的例項化延遲到了子類
一天一個設計模式---裝飾者模式
優點:它可以動態為物件新增功能。 場景:我們希望為某個物件而不是整個類新增一些功能。 一、角色及作用 裝飾者和被裝飾者擁有相同的元件介面。被裝飾者是系統的核心元件,完成特定功能。裝飾者則可以在被裝飾者的方法前後,加上特定的前置處理和後置處理,增強被裝飾
C#設計模式之行為類模式:模板方法模式
frame 應該 ocp 方式 src 代碼復用 操作 優缺點 sse 定義(Template Method) 定義一個操作中算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。 啟示 組裝電腦一般包含三個部分,主機、顯示
C#設計模式之創建類模式:抽象工廠模式
nfa display color 職責 product 依賴對象 pset 並不是 config 定義:提供一個創建一系列相關或相互依賴對象的接口,而無須指定他們具體的類。 概念 要理解抽象工廠模式,首先要了解幾個概念,一個是產品等級結構,另一個是產品族。 在工廠方法模
“Head First 設計模式“ :模板方法模式
設計模式 模板方法模式 模板方法 模板方法模式 定義:模板方法模式在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變算法結構的情況下,重新定義算法中的某些步驟。模板方法就是一個固定步驟的“算法”骨架方法。這個算法的可變部分通過繼承,在子類中重載實現。這樣就可以
設計模式:工廠方法模式
left 實例 設計模式 設計 通過 耦合度 creat margin 增加 一、簡單工廠模式 1、內容 不直接向客戶端暴露對象創建的實現細節,而是通過一個工廠類來負責創建產品類的實例 2、角色 1、工廠角色(Factory) 2、抽象產品角色(Product) 3、具體產
Java設計模式(二)之建立型模式:抽象工廠模式
例子背景: 隨著客戶的要求越來越高,寶馬車需要不同配置的空調和發動機等配件。於是這個工廠開始生產空調和發動機,用來組裝汽車。這時候工廠有兩個系列的產品:空調和發動機。寶馬320系列配置A型號空調和A型號發動機,寶馬230系列配置B型號空調和B型號發動機。 一、概念:
設計模式:抽象工廠模式(Python)
抽象工廠模式(Abstract Factory Pattern): 提供一個介面,用於建立相關或依賴物件的家族,而不需要明確指定具體類。 原則: 依賴抽象,不要依賴具體類。 案例: 還是“工廠方法模式”中的例子,但是換一種方式來解決: 因為口味的不同是原材料的不同造成的,
設計模式:模板方法模式-template method
定義一個操作中的演算法骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個演算法的結構即可重新定義該演算法的某些特定步驟 在抽象父類中,可以定義多種不同型別的方法,如下: 呼叫基本