建造者設計模式——工廠模式
1.簡單(靜態)工廠模式
簡單工廠模式用於根據外界的需求來生產相應的產品的這種情況,當需要一個產品的時候,使用者只需要給引數(比如說名字)給工廠,工廠根據這個引數生產響應的產品來即可。
下面放一個完整的DEMO
package defaultPk; public class LearnFactoryDesign { static abstract class AbstractProduct{ //抽象產品 abstract public void getType(); } //產品都要繼承自抽象產品類 static class ProductA extends AbstractProduct{ @Override public void getType() { System.out.println("我是A產品!"); } } static class ProductB extends AbstractProduct{ @Override public void getType() { System.out.println("我是B產品!"); } } //工廠類,用於生產產品 static class MyFactory{ public static AbstractProduct getProduct(String type){ if(type=="A")return new ProductA();//也可以用反射獲取物件 if (type=="B")return new ProductB(); return null; } } public static void main(String[] args){ MyFactory.getProduct("A").getType(); MyFactory.getProduct("A").getType(); MyFactory.getProduct("B").getType(); MyFactory.getProduct("B").getType(); } }
可知實現簡單工廠模式要注意兩點:
——要有個抽象產品類,產品都要繼承於這個類
——要有個工廠類,它一般為一個靜態類,在裡面接收引數,生產產品。
簡單工廠模式優缺點
優點:能動態生產所需要的產品例項
缺點:一旦這個工廠出了問題,所有的客戶端都會受到牽連;違背了單一職責,導致系統喪失靈活性和可維護性。簡單工廠模式違背了“開放封閉原則”,就是違背了“系統對擴充套件開放,對修改關閉”的原則。
2.工廠方法模式
基於簡單工廠模式的一個擴充套件,我們可以把工廠也給它抽象咯。
如果說簡單工廠模式能提供南京的各種產品,那麼抽象工廠模式就能提供南京、上海、蘇州等地的各種產品。
我把簡單工廠模式的DEMO改了下形成了這個抽象工廠模式的DEMO,我放出來吧。
package defaultPk; public class LearnFactoryDesign { static abstract class AbstractProduct{ //抽象產品 abstract public void getType(); } //產品都要繼承自抽象產品類 static class ProductA extends AbstractProduct{ @Override public void getType() { System.out.println("我是A產品!"); } } static class ProductB extends AbstractProduct{ @Override public void getType() { System.out.println("我是B產品!"); } } //抽象工廠類 abstract static class AbstractFactory{ public abstract AbstractProduct getProduct(String type); } //上海工廠 static class ShanghaiFactory extends AbstractFactory{ @Override public AbstractProduct getProduct(String type) { if (type=="A") { System.out.print("上海工廠發貨-"); return new ProductA(); } if (type=="B") { System.out.print("上海工廠發貨-"); return new ProductB(); } return null; } } static class NanjinFactory extends AbstractFactory{ @Override public AbstractProduct getProduct(String type) { if (type=="A") { System.out.print("南京工廠發貨-"); return new ProductA(); } if (type=="B") { System.out.print("南京工廠發貨-"); return new ProductB(); } return null; } } public static void main(String[] args){ NanjinFactory nanjinFactory=new NanjinFactory(); ShanghaiFactory shanghaiFactory=new ShanghaiFactory(); nanjinFactory.getProduct("A").getType(); nanjinFactory.getProduct("B").getType(); shanghaiFactory.getProduct("A").getType(); shanghaiFactory.getProduct("B").getType(); } }
可知,實現工廠方法模式需要注意兩點:
——要有產品的抽象類,所有產品都繼承自這個類
——要有工廠的抽象類,所有工廠都繼承自這個類
最後根據需求呼叫特定工廠來生產特定產品即可。
最後看看抽象工廠模式
先回顧下簡單工廠模式,它僅僅抽象了產品,所以我們僅能從一個工廠生產同一個家族系的產品。
工廠方法模式,不僅把產品抽象了,還把工廠也抽象了,所以我們能從多個工廠生產同一個家族系的產品,每一個工廠能生產一個產品家族。
最後我們看看馬上要說的抽象工廠模式,這個模式把工廠產品都抽象了,不過,與工程方法模式不同的是,它的產品抽象不止一個,而是有多個,這就讓工廠能生產不同家族的產品。舉個例子:雅馬哈的某個工廠原來是搞樂器的,能生產樂器家族的小提琴、鋼琴、笛子啥的,後來就開始搞摩托,能生產摩托家族的仿賽、街車、越野車啥的。
總結
要根據是否使用多個工廠、是否生產不同家族系的產品來確定使用何種工廠模式。
相關推薦
建造者設計模式——工廠模式
1.簡單(靜態)工廠模式 簡單工廠模式用於根據外界的需求來生產相應的產品的這種情況,當需要一個產品的時候,使用者只需要給引數(比如說名字)給工廠,工廠根據這個引數生產響應的產品來即可。 下面放一個完整的DEMO package defaultPk; pub
設計模式之建造者設計模式
這是設計模式系列的第二篇——建造者設計模式,我希望推送的文章是一個系列的,儘量保持一樣的寫作風格,儘量把我理解的闡述清楚,關於建造者設計模式主要從以下幾個方面來學習,具體如下: 概述 本質 關鍵概念 具體實現 總結 概述 建造者設計模式(
建造者設計模式
1.建造者模式分析 重點:和工廠模式的不同就是建造者模式是強調有順序的 1 ) 先建立一個具體的產品物件類: ②然後再寫抽象建造者類(定義了產品的建立方法和返回方法) ③要寫具體建造者(實現上面的抽象介面,具體實現構建和裝配各個部件),可以寫多個不同的具體建造者 ④接著編寫指揮者類
【java設計模式】之 建造者(Builder)模式
我們還是舉上一節的例子:生產汽車。上一節我們通過模板方法模式控制汽車跑起來的動作,那麼需求是無止境的,現在如果老闆又增加了額外的需求:汽車啟動、停止、鳴笛引擎聲都由客戶自己控制,他想要什麼順序就什麼順序,那該如何做呢? 1. 汽車無休止的改造
設計模式的征途—6.建造者(Builder)模式
建造者模式又稱為生成器模式,它是一種較為複雜、使用頻率也相對較低的建立型模式。建造者模式為客戶端返回的不是一個簡單的產品,而是一個由多個部件組成的複雜產品。因為,沒有人買車會只買一個方向盤或者輪胎,大家買的都是一輛包含輪胎、方向盤和發動機等多個部件組成的完整汽車。如何將這些部件組裝成一輛完整的汽車並返回給使用
Java設計模式の工廠模式
做的 uml圖 blog 女人 類實例化 全部 抽象 src 針對 -------------------------------------------------------- 目錄: 一、序言 二、簡單工廠模式 三、工廠方法模式 四、簡單工
java設計模式—工廠模式
其他 抽象工廠 如同 lan 相關 efault factor 依賴對象 代碼 一、工廠模式主要是為創建對象提供過渡接口,以便將創建對象的具體過程屏蔽隔離起來,達到提高靈活性的目的。 工廠模式在《Java與模式》中分為三類:1)簡單工廠模式(Simple Factory):
設計模式—工廠模式
pro java pla 靜態工廠方法 靜態工廠模式 -i bsp sse src java中的23中設計模式 1. 工廠模式 工廠模式分為三種 (1.)普通工廠模式 普通工廠模式,就是建立一個工廠類,對實現了同一個接口的一些類進行實例的
[設計模式]工廠模式
方便 修改 sub 如果 n) abs 根據 pla visio 本文主要論述了以下幾方面: 1.總論 2.簡單工廠模式 3.工廠方法模式 4.抽象工廠模式 1.總論 在工廠設計模式中,客戶端可以請求一個對象,而無需知道這個對象來自哪裏
PHP設計模式-工廠模式
implement 不同的 span 不同 client 模式 public ref tail 代碼摘抄自:http://blog.csdn.net/mysteryhaohao/article/details/51181089 使用場景: 如果很多地方調用了類Test,那麽
設計模式 工廠模式 使用shared_ptr
urn pro 控制臺 pen int .cpp 設計模式 繼承 spl 參考http://blog.csdn.net/calmreason/article/details/50903729 所有產品繼承同一基本類 由工廠保存基類指針 產生各類產品 代碼 /
一起來學設計模式-----工廠模式的實踐
既然 全局 只需要 又是 選擇 宏函數 深入 bcm get 工廠設計模式是入門模式,也是使用較多的模式,這一篇就總結下我在測試項目時,看到使用的地方以及編寫測試樁時基於此模式的實際運用。 實例一:測試的c++項目——簡單工廠+宏函數反射的使用
java設計模式-工廠模式(springweb為例子)
core puts 臃腫 設計 需要 utm 實現 reat jar 一般而言,工廠模式分為3種,簡單工廠模式,工廠方法模式,抽象工廠模式。這三種工廠模式逐層深入吧。 一,從springWeb.jar包使用抽象工廠模式的一個例子聊起 之前對spring各種癡迷,所以在需要發
php的設計模式------工廠模式
getc 設計模式 gets shu 延遲 echo 方法 product blue 1.工廠模式簡介 屬於創建型模式。定義一個創建對象的接口,讓其子類自己決定實例化哪一個工廠類,工廠模式使其創建過程延遲到子類進行主要解決的問題:接口選擇的問題。 2.分類 2.1 簡單
設計模式——工廠模式
設計 操作 基於 people .com sys factory body ati 什麽是工廠模式 簡單工廠模式:後來出現工業革命。用戶不用去創建寶馬車。因為客戶有一個工廠來幫他創建寶馬.想要什麽車,這個工廠就可以建。比如想要320i系列車。工廠就創建這個系列的車。即工廠
設計模式:工廠模式
ide 通用 指定 turn IT left func dep cif 一、工廠方法模式 工廠方法模式。定義為:Define an interface for creating an object,but let subclasses decide which cla
Javascript設計模式-工廠模式
The 沒有 children 一行 lob emp object ring 工作效率 Javascript設計模式-工廠模式 我理解工廠模式,就是把相關的多個類提供一個統一入口的一個模式,讓你從一個入口就可以獲得多個類,提高工作效率. 但是對於工廠模式也會有三
設計模式-工廠模式
ret 派生 end ring circle struct att eat n) Design Pattern - Factory mode 《C++編程思想》筆記 1. 通用工廠,或者靜態工廠 在子類中把父類聲明為友元類 在下面示例的工廠模式中,子類的構造函數的訪問權限為
詳解設計模式 - 工廠模式(3種)
這篇文章作為個人學習備忘筆記,通過生活中的牛奶工廠例項,比對3種工廠模式的不同。 工廠模式一句話總結: 只對生產結果負責,不要三無產品。 生活中的工廠例子 小作坊:五花八門什麼都能生產,但生產質量和產品種類不一定滿足消費者的需求。 專業工廠:遵循一定標準,
JAVA 23種設計模式---工廠模式(簡單工廠模式)
寫在前面的話: java常用的設計模式有23種,設計模式就是為了重用程式碼、解耦、讓程式碼更容易讓他人理解、保證程式碼可靠性 設計模式遵循的原則有6個: 1、開閉原則(Open Close Principle) 對擴充套件開放,對修改關閉。 2、里氏代換原則(Liskov S