1. 程式人生 > >建造者設計模式——工廠模式

建造者設計模式——工廠模式

1.簡單(靜態)工廠模式

preview

簡單工廠模式用於根據外界的需求來生產相應的產品的這種情況,當需要一個產品的時候,使用者只需要給引數(比如說名字)給工廠,工廠根據這個引數生產響應的產品來即可。

下面放一個完整的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.工廠方法模式

preview

基於簡單工廠模式的一個擴充套件,我們可以把工廠也給它抽象咯。

如果說簡單工廠模式能提供南京的各種產品,那麼抽象工廠模式就能提供南京、上海、蘇州等地的各種產品。

我把簡單工廠模式的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();

    }
}

可知,實現工廠方法模式需要注意兩點:

——要有產品的抽象類,所有產品都繼承自這個類

——要有工廠的抽象類,所有工廠都繼承自這個類

最後根據需求呼叫特定工廠來生產特定產品即可。

最後看看抽象工廠模式

preview

先回顧下簡單工廠模式,它僅僅抽象了產品,所以我們僅能從一個工廠生產同一個家族系的產品。

工廠方法模式,不僅把產品抽象了,還把工廠也抽象了,所以我們能從多個工廠生產同一個家族系的產品,每一個工廠能生產一個產品家族。

最後我們看看馬上要說的抽象工廠模式,這個模式把工廠產品都抽象了,不過,與工程方法模式不同的是,它的產品抽象不止一個,而是有多個,這就讓工廠能生產不同家族的產品。舉個例子:雅馬哈的某個工廠原來是搞樂器的,能生產樂器家族的小提琴、鋼琴、笛子啥的,後來就開始搞摩托,能生產摩托家族的仿賽、街車、越野車啥的。

總結

 要根據是否使用多個工廠、是否生產不同家族系的產品來確定使用何種工廠模式。

相關推薦

建造設計模式——工廠模式

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