1. 程式人生 > >簡單工廠模式和工廠方法模式的區別

簡單工廠模式和工廠方法模式的區別

本文舉了一個計算器的例子,該例子實現的功能是加減乘除的功能。
簡單工廠模式:就是如何去例項化物件的問題,對於很容易變化的問題,應該考慮用一個單獨的類來做這個創造例項的過程,這就是工廠。例子如下:

package com.factory;
public class Operation {
    private double numberA = 0;
    private double numberB = 0;
    public double getNumberA() {
        return numberA;
    }
    public void setNumberA(double
numberA) { this.numberA = numberA; } public double getNumberB() { return numberB; } public void setNumberB(double numberB) { this.numberB = numberB; } public double getResult() { double result = 0; return result; } } package com.factory; /** * 加法 * @author
Administrator * */
public class OperationAdd extends Operation{ @Override public double getResult() { double result = 0; result = getNumberA() + getNumberB(); return result; } } /** * 減法 * @author Administrator * */ public class OperationSub extends Operation{ @Override
public double getResult() { double result = 0; result = getNumberA() - getNumberB(); return result; } } /** * 乘法 * @author Administrator * */ public class OperationMul extends Operation{ @Override public double getResult() { double result = 0; result = getNumberA() * getNumberB(); return result; } } /** * 除法 * @author Administrator * */ public class OperationDiv extends Operation{ @Override public double getResult() { double result = 0; try { if (0 == getNumberB()){ throw new Exception("除數不能為0"); } } catch (Exception e) { e.printStackTrace(); } result = getNumberA() / getNumberB(); return result; } } /** * 簡單運算工廠類 * @author Administrator * */ public class OperrateFactory { public static Operation createOperate(String operate) { Operation oper = null; if (operate.equals("+")) { oper = new OperationAdd(); } else if (operate.equals("-")) { oper = new OperationSub(); } else if (operate.equals("*")) { oper = new OperationMul(); } else if (operate.equals("/")) { oper = new OperationDiv(); } return oper; } }

在這個例子中,只需要輸入運算子,工廠就例項化出合適的物件,通過多型返回父類的方式實現了計算器的結果。而客戶端只要這樣呼叫就可以了,如下:

    Operation operation ;
//      operation = OperrateFactory.createOperate("+");
//      operation = OperrateFactory.createOperate("-");
//      operation = OperrateFactory.createOperate("*");
        operation = OperrateFactory.createOperate("/");
        operation.setNumberA(1);
        operation.setNumberB(2);
        System.out.println(operation.getResult());

而使用工廠方法模式實現的話,那就要先建立一個工廠介面,然後加減乘除各建一個工廠方法去實現這個介面。例子如下:

/**
 * 工廠介面
 * @author Administrator
 *
 */
public interface IFactory {
    Operation createOperation();
}
/**
 * 加法
 * @author Administrator
 *
 */
public class AddFactory implements IFactory{
    @Override
    public Operation createOperation() {
        return new OperationAdd();
    }
}
/**
 * 除法
 * @author Administrator
 *
 */
public class DivFactory implements IFactory{
    @Override
    public Operation createOperation() {
        return new OperationDiv();
    }
}
/**
 * 乘法
 * @author Administrator
 *
 */
public class MulFactory implements IFactory{
    @Override
    public Operation createOperation() {
        return new OperationMul();
    }
}
/**
 * 減法
 * @author Administrator
 *
 */
public class SubFactory implements IFactory{
    @Override
    public Operation createOperation() {
        return new OperationSub();
    }

}
客戶端實現:
        IFactory factory = new AddFactory();
        Operation operation = factory.createOperation();
        operation.setNumberA(1);
        operation.setNumberB(2);
        System.out.println(operation.getResult());

1.簡單工廠和工廠方法的區別:簡單工廠模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關的類,對於客戶端來說,去除了與具體產品的依賴。
就像這個計算器,讓客戶端不用管該用哪個類的例項,只需要把“+”給工廠,工廠自動就給出了相應的例項,客戶端只要去運算就可以了,不同的例項會實現不同的運算。
2.工廠模式方法(factory method),定義一個用於建立物件的介面,讓子類決定例項化哪一個類。工廠方法使一個類的例項化延遲到子類。
3.工廠方法模式實現時,客戶端需要決定例項化哪一個工廠來實現運算類,選擇判斷的問題還是存在的,也就是說,工廠方法把簡單工廠的內部邏輯判斷移到了客戶端程式碼來進行。你想要加功能,本來是要改工廠類的,而現在是修改客戶端。
4.工廠方法克服了簡單工廠違背開放-封閉原則的缺點,又保持了封裝物件建立過程的優點。這兩者都是集中封裝了物件的建立,使得要更換物件時,不需要做大的改動就可實現,降低了客戶程式與產品物件的耦合。工廠方法模式是簡單工廠模式的進一步抽象和推廣。由於使用了多型性,工廠方法模式保持了簡單工廠模式的優點,而且克服了它的缺點。但缺點是由於每加一個產品,就需要加一個產品工廠的類,增加了額外的開發量。

相關推薦

Java進階篇設計模式之十一 ---- 策略模式模板方法模式

前言 在上一篇中我們學習了行為型模式的訪問者模式(Visitor Pattern)和中介者模式(Mediator Pattern)。本篇則來學習下行為型模式的兩個模式,策略模式(Strategy Pattern)和模板模式(Mediator Pattern)。 策略模式 簡介 策略模式(Stra

設計模式系列之四_策略模式 模版方法模式(Template method)

1.策略模式 1.1 策略模式   策略模式定義了一系列的演算法,並將每一個演算法封裝起來,而且使它們還可以相互替換。 策略模式讓演算法獨立於使用它的客戶而獨立變化。   策略模式屬於物件的行為模式。其用意是針對一組演算法,將每一個演算法封裝到具有 共同介面的獨立的類中,

Java設計模式之十一 ---- 策略模式模板方法模式

得到 ref images 幾種算法 www. lse -type 中介者模式 vat 前言 在上一篇中我們學習了行為型模式的訪問者模式(Visitor Pattern)和中介者模式(Mediator Pattern)。本篇則來學習下行為型模式的兩個模式,策略模式(Stra

簡單工廠模式工廠方法模式區別

本文舉了一個計算器的例子,該例子實現的功能是加減乘除的功能。 簡單工廠模式:就是如何去例項化物件的問題,對於很容易變化的問題,應該考慮用一個單獨的類來做這個創造例項的過程,這就是工廠。例子如下: package com.factory; public c

【設計模式簡單工廠模式工廠方法模式

產生 for plm nbsp osc rbm play stp mage > 簡單工廠模式 顧名思義,此模式的設計結構是簡單的,核心是生產對象。 一般來說,運用工廠模式生產的對象應該是構建對象的過程比較復雜的,獲取構建對象的過程在日後可能發生變更的。 簡單工廠

簡單工廠模式工廠模式區別及實現

簡單工廠模式 簡單工廠模式模式分為三種:普通簡單工廠、多方法簡單工廠、靜態方法簡單工廠。 01、普通簡單工廠(傳送郵件和簡訊的例子) 首先,建立二者的共同介面: public interface Sender {    &n

Java中常見的設計模式---簡單工廠模式工廠方法模式單例模式

在講設計模式之前,我們首先來說一下面向物件思想的設計原則,在實際的開發中,我們要想更深入的瞭解面向物件思想,就必須熟悉前人總結過的面向物件的思想的設計原則:1.單一職責原則:“高內聚,低耦合”,也就是說,每個類應該只有一個職責,對外只能提供一種功能,而引起類變化的原因應該只有

簡單工廠模式工廠方法模式適用場景

1、簡單工廠模式: (1)工廠類負責建立的物件比較少,由於建立的物件較少,不會造成工廠方法中的業務邏輯太過複雜。 (2)客戶端只知道傳入工廠類的引數,對於如何建立物件並不關心。 2、工廠方法模式 (1)客戶端不知道它所需要的物件的類。 (2)抽象工廠類通過其子類來指定建立

設計模式學習筆記(二)--簡單工廠模式工廠模式

bsp bubuko rac oid nds gen body () pri 老生長談的兩個設計模式了,這裏把這兩個設計模式對比著來總結一下。 什麽是簡單工廠模式? 簡單工廠模式:根據傳入工廠類的參數動態決定要創建哪一個產品類的實例。 UML圖如下(以實現一個計算器為例):

策略模式工廠模式區別

工廠模式是建立型模式 策略模式是行為性模式 一個關注物件建立 一個關注行為的封裝 策略模式就是定義一系列的演算法,這些演算法可以在需要的時候替換和擴充套件.工廠模式是生成型的模式,在你需要的時候構建具

抽象工廠模式工廠模式的本質區別(程式碼示例)

抽象工廠模式是讓工廠和依賴工廠的子類全部依賴一個介面或者抽象類,因為抽象代表這穩 定,這樣可以很容易的遵循oo中比較著名的開放關閉原則,設計出來的系統、框架或者程式 很富有彈性和擴充套件能力(這句話有點大概的意思,沒有具體的) 網上搜一句話,不知道對還是錯  其實這兩

【Python】工廠模式建造者模式區別

最近在看《精通Python設計模式(Mastering Python Design patterns)》, 剛剛看完建造者模式,由於和看完工廠模式隔的時間有點久,再加上兩者本來就很像,有點分不清了。 所以,今天又看了看這兩者,區分一下,加強下記憶,以便安心看後邊的設計模式

代理模式簡單(靜態)工廠模式,單例模式,模板方法模式個人理解

簡言: java中總共有23種設計模式,每個模式的出現都是為了解決某一方面的問題,所以這23種設計模式有他們各自適用的地方(廢話有點多),而設計模式的產生主要是為了降低類與類之間的耦合度。下面我們就簡單的瞭解一下幾種設計模式及使用的地方。 1.單例模式:

工廠模式穩妥構造模式區別

先上程式碼,來自《JS高程》function createPerson(name, age, job) { var o = new Object(); o.name = name; o.age = age; o.job = job; o

設計模式:建造者模式及在jdk中的體現,建造者模式工廠模式區別

# 0、背景 建造模式(Builder模式) 假如有一個需求:蓋房子,蓋房子過程是一致的:打樁、砌牆、封頂。但是房子是各式各樣的,最後蓋出來的房子可能是高樓或別墅。 根據直接的思路,不用設計模式思想,我們也許會: 1. 寫一個 CommonHouse 抽象類,然後裡面規定了打樁、砌牆、封頂三個方

單例模式工廠模式

必須 order pac border 聲明 並且 span lin 實例對象 PHP------單例模式和工廠模式

我的設計模式工廠模式橋梁模式

工廠模式 橋梁模式 抽象工廠模式 1.簡單工廠模式 Factory Method Pattern能生產某類(接口管理)東東,可以指定特定的類延遲初始化: 使用全局變量Map減少類的初始化過程獲取接口下的全部實現類:ClassUtils2.抽象工廠模式 Abstract Factory

常見的設計模式工廠模式單例模式

工廠模式 工廠方法模式有兩個抽象類,一個是產品抽象類,一個是工廠抽象類,若干個具體產品類和對應的具體工廠類,具體產品抽象類與產品抽象類是實現關係,與具體工廠類是依賴關係,具體工廠類與抽象工廠類是實現關係。 客戶端程式碼如下 工廠模式是定義一個用於建立物件的介面,讓子類決定將哪一個

關於工廠模式建造者模式的理解

通常情況下java裡面建立一個物件都是直接使用new關鍵字,但是隨著對java理解的深入逐漸會接觸到設計模式,設計模式中關於物件建立的模式主要有兩種:工廠模式和建造者模式,在這篇博文中來探討一下這三種建立物件方式的理解,不當之處,望大家指正。 一、使用new關鍵字直接建立 假設我們有一個

設計模式一(php示例 單例模式工廠模式

所謂的設計模式,就是具有多年開發經驗的人,在實際工作中為了解決某一種需求,而形成的一套程式碼方案。 1.單例模式: 單例模式:所謂的單例模式就是單一的例項。通過一個類永遠只能獲取一個物件。 基本的實現思路:單例模式要求類能夠有返回物件一個引用(永遠是同一個)和一個獲得該例項的方法(必