設計模式學習 工廠模式

2021-09-10 16:45:48 字數 2655 閱讀 9001

工廠模式部分內容主要包括簡單工廠模式、工廠方法模式、抽象工廠模式。下面各個例子省略了main方法。

簡單工廠模式:定義乙個工廠類,它可以根據引數的不同返回不同類的例項,被建立的例項通常都具有共同的父類。因為在簡單工廠模式中用於建立例項的方法是靜態(static)方法,因此簡單工廠模式又被稱為靜態工廠方法(static factory method)模式。簡單工廠方法使用比較簡單,建立相應的工廠類,執行方法時傳入不同的引數,然後生成不同的物件,如下面例子所示。

public inte***ce sportsman
public class footballplayer implements sportsman 

}

public class hoopman implements sportsman 

}

public class sportsmanfactory 

return sportsman;

}}

優點:實現了物件建立和使用的分離,客戶端無需知道物件的建立過程,只要傳入相應的引數,那麼就可以拿到對應的結果,可以通過在呼叫處引入配置(xml檔案、資料庫等)來實現引數的配置。

缺點:工廠類的功能過於重要,有過的if、else判斷,對於新增的產品,同時也要加入if、else判斷,不適合太多產品的建立,如果產品經常新增,那麼修改次數較大, 不符合開閉原則。

工廠方法模式:定義乙個用於建立物件的介面,讓子類決定將哪乙個類例項化。為每個產品建立自己的實現工廠,將工廠和產品都抽出成為介面。工廠方法模式讓乙個類的例項化延遲到其子類。可以理解為,最初建立了乙個工廠,工廠規模比較小,什麼牌子的都可以進行生產,但是隨著工廠規模的增大,工廠也需要進行拆分,比如根據品牌進行拆分。工廠變為了乙個抽象,其功能為生產鞋子(抽象)。實現工廠的子類有耐克工廠、李寧工廠等,都繼承了生產鞋子方法,分別生產耐克鞋子,李寧鞋子。

public inte***ce sportsman
public inte***ce sportsmanfactory
public class hoopman implements sportsman 

}

public class hoopmanfactory implements sportsmanfactory 

}

public class footballplayer implements sportsman 

}

public class footballplaye***ctory implements sportsmanfactory 

}

優點:使用物件處只需要關心對應產品的工廠,對於新增的產品,那麼只要通過修改配置獲取新增產品的工廠就可以了,新增產品時,不需要修改公共的工廠物件,只要新增乙個自己的產品工廠,完全實現了開閉原則。

缺點:每次新增產品都要新增兩個類,**比較繁瑣。

抽象工廠模式:提供乙個建立一系列相關或相互依賴物件的介面,而無須指定它們具體的類。抽象工廠模式又稱為kit模式,它是一種物件建立型模式。個人感覺抽象工廠更像是對工廠方法模式的歸類。比如李寧、耐克品牌都有生產鞋子、上衣、褲子的功能,如果還是按照工廠方法模式,李寧需要3個產品類和3個產品工廠類,耐克同樣,但是抽象工廠方法可以對品牌進行歸類,比如工廠具有生產鞋子、上衣、褲子的功能,李寧工廠生產李寧鞋子、李寧上衣、李寧褲子,耐克同樣;避免了客戶端大量**,同時減少了類的建立。

public inte***ce sportsfactory
public inte***ce sportsclothes
public inte***ce sportsshoes
public class liningfactory implements sportsfactory 

@override

public sportsclothes createsportsclothes()

}

public class liningclothes implements sportsclothes

public class liningshoes implements sportsshoes
public class nikefactory implements sportsfactory

@override

public sportsclothes createsportsclothes()

}

public class nikeclothes implements sportsclothes
public class nikeshoes implements sportsshoes
優點:符合開閉原則,減少了客戶端大量**的引用,減少了工廠類的建立。

缺點:對於新增分類型別比較方便,只要建立相應的產品類和產品工廠就可以,但是如果抽象介面中新增了產品型別,那麼不但為每個分了建立相應的產品類,還要修改每個產品工廠類。

設計模式學習 工廠模式

工廠模式是較常見的一種設計模式 一 基本特點 工廠模式可分為簡單工廠模式,工廠模式和抽象工廠模式,它們的思路和實現都很相似.基本特點為至少包括以下三個類 工廠類 用new操作符建立各種產品類 抽象產品類 各產品類的基類,定義了產品的介面,具體產品類 抽象產品類的子類,包含了具體實現 使用者在使用時通...

設計模式學習(工廠模式)

這裡說的工廠模式是簡單工廠模式和抽象工廠模式,兩者有一定的區別,也有共同之處。上述過程是開閉原則的乙個典型體現。在下圖的例子中,factory類依賴具體物件的抽象來建立具體的物件 dell,sony 這乙個過程帶來的好處就是實現了factory類與具體產品之間的解耦合。客戶端可以自由的通過facto...

設計模式 工廠模式(學習)

在程式的世界裡,就像射鵰英雄傳一樣,我們的技能就像是武功一樣,我們只有不斷去學習練習才能有機會像郭靖一樣成為 天下第一 我認為技能和武功是很類似的,也有外功和內功,武俠之內功好比是我們技能演算法 武俠的外功好比是我們技能中某一語言的語法 武功秘籍好比是我們每種語言都有api和文件 武俠的勤加練習好比...