1. 程式人生 > >設計模式-工廠模式(FactoryMethod)

設計模式-工廠模式(FactoryMethod)

我的github
對於一個Java應用來說,會存在很多的呼叫關係,比如物件A的方法呼叫物件B的方法,就說物件A依賴物件B.

常規的做法是在類A中例項化B物件,再進行使用.但是這裡存在一個問題,如果將來進行應用升級改進,不再使用B的方法而是使用物件C的方法.如果系統比較大,有多個使用物件B方法的地方就要進行更改,當這個數量達到成百上千個時,修改起來將會非常麻煩.

在工廠模式中,所使用的便是面向物件的多型性,物件是父類,呼叫的卻是子類的方法.
實現原理如圖:
1.頂層介面確定方法;
2.子類實現頂層介面;
3. 工廠方法產生例項物件;
4. 向呼叫者傳遞物件;
5. 物件設定內部的Top介面變數,並呼叫方法;
這裡寫圖片描述

實現程式碼:

package FactoryMethod;

public class FactoryMethod {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TopInterface top = factory.getInstance();

        application app = new application(top);
        app.AppPrint();
    }

}
//應用程式
class application
{
private TopInterface Top;//建立內部的頂層介面變數 public application(TopInterface Top) { this.Top = Top; } public void AppPrint() { Top.Print(); } } //建立頂層介面 interface TopInterface{ public void Print(); } //建立工廠類 class factory{ /*the str can read from the config file*/
private static String str = "outtwo"; //根據不同的值確定例項化不同的物件 public static TopInterface getInstance() { if(str.equalsIgnoreCase("outone")) { System.out.println("use outone class"); return new outone(); } else if(str.equalsIgnoreCase("outtwo")) { System.out.println("use two class"); return new outtwo(); } else { return null; } } } //類1 class outone implements TopInterface{ public void Print() { System.out.println("this is one out class"); } } //類2 class outtwo implements TopInterface{ public void Print() { System.out.println("this is two out class"); } }

當需要更換application中呼叫的類時,只需修改工廠類中的這個地方即可,該引數也可從配置檔案中讀取,就不必重新編譯程式.

private static  String str = "outtwo";

這裡有一個問題是,如果按照上面的寫法,將會全域性修改工廠類中產生的物件.但是有可能有這樣的需求,程式中部分使用outone.Print(),部分需修改為outtwo.Print();.因此在設計程式時需要考慮這方面的相容性.

相關推薦

設計模式工廠模式FactoryMethod

我的github 對於一個Java應用來說,會存在很多的呼叫關係,比如物件A的方法呼叫物件B的方法,就說物件A依賴物件B. 常規的做法是在類A中例項化B物件,再進行使用.但是這裡存在一個問題,如果將來進行應用升級改進,不再使用B的方法而是使用物件C的方法.如

工廠方法FactoryMethod

多個 family interface sys 實現 它的 ans sta 指定 概述:定義一個用於創建對象的接口,讓子類決定實例化哪一個類(使一個類的實例化延遲到其子類)適用性:當一個類不知道它必須創建的對象的類的時候當一個類希望由它的子類來指定它所創建的對象的時候當類將

_082_Java_工廠方法FactoryMethod

 概述: 定義一個用於建立物件的介面,讓子類決定例項化哪一個類。FactoryMethod使一個類的例項化延遲到其子類。 適用性: 1. 當一個類不知道它所必須建立的物件的類的時候 2. 當一個類希望由它的子類來指定它所建立的物件的時候 3. 當類將建立物件的

設計模式4-工廠方法模式FactoryMethod、抽象工廠模式AbstractFactory解析+案例實踐+總結

本文是對面向物件設計模式--工廠方法模式(FactoryMethod)和抽象工廠模式(AbstractFactory)的解析,主要分為定義解析、簡單工廠方法講解、工廠方法模式講解、抽象工廠模式講解、多案例練習加深對工廠方法模式與抽象工廠模式的理解、最後總結知識要點。 第一篇

iOS 設計模式工廠方法模式FactoryMethod

工廠方法模式克服了簡單工廠模式違背開放-封閉原則的缺點,保持了封裝物件建立過程的優點。 要更換物件時,無論用簡單工廠模式還是工廠方法模式,都可以不用做大的改動,就可以實現,降低樂樂客戶程式與產品物件的耦合。 工廠方法模式是簡單工廠模式的進一步抽象和推廣,缺點

設計模式——抽象工廠模式C++實現

concrete out png return style bsp ctp img using 1 #include <iostream> 2 #include <string> 3 4 usin

設計模式學習——工廠模式Factory Pattern

cto ret cas .exe on() 生產 delet 基礎 names 1、有一個工廠,專門生產不同品牌的汽車。當有人需要從此工廠提貨的時候,只需要告訴他,要什麽品牌的,就可以了,並不關心這些車是怎麽生產出來的。 2、以上方式,如果增加品牌的時候,也要修改工廠,有點

Java設計模式工廠模式:抽象工廠模式

mar 模式 blank http left taxi ref www. app 2碳依5FVL冒傲3http://t.docin.com/etw488 am懦7鈉N山段9慌Q闌http://shequ.docin.com/ipu5657 iK1諾5N鍛認EUK剖嘲肆h

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

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

Java設計模式之建立型模式工廠模式簡單工廠模式+工廠方法模式

在面向物件程式設計中, 最通常的方法是一個new操作符產生一個物件例項,new操作符就是用來構造物件例項的。但是在一些情況下, new操作符直接生成物件會帶來一些問題。舉例來說,許多型別物件的建立需要一系列的步驟:你可能需要計算或取得物件的初始位置;選擇生成哪個子物件例項;或在你生成你需要的物件

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

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

設計模式工廠模式包含三種模式

設計模式是一套被反覆使用,多數人知曉,經過分類編目的,程式碼設計的總結,也可以說是前人的智慧結晶。學習設計模式能讓我們對一些應用場景使用相同的套路達到很好的效果,我會不定時更新一些自己對設計模式的理解的文章,從定義,實現,應用場景來說說設計模式,今天我要說的物件是工廠模式一:定義什麼是工廠?工廠模式是我們最常

重走Java設計模式——抽象工廠模式Abstract Factory Pattern

抽象工廠模式 抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的一種形態。 抽象工廠模式是指當有多個抽象角色時,使用的一種工廠模式。抽象工廠模式可以向客戶端提供一個介面,使客戶端在不必指定產品的具體的情況下,建立多個產品族中的產品物件。根據里氏替換原則,任

設計模式工廠模式工廠方法模式、簡單工廠模式、抽象工廠模式

工廠模式 工廠模式是最常用的設計模式之一,這種型別的設計模式屬於建立設計模式,它提供了一種建立物件的最佳方式。 優點:1、一個呼叫者想建立一個物件,只要知道其名稱就可以了。 2、擴充套件性高,如果想要增加多一個產品,只要擴充套件一個工廠類就可以了。 3、隱蔽產品的具體實現,呼叫者只要關係產品的介面。 程

設計模式工廠模式

意圖:定義一個建立物件的介面,讓其子類自己決定例項化哪一個工廠類,工廠模式使其建立過程延遲到子類進行。 主要解決:主要解決介面選擇的問題。 以下我們以一個汽車工廠為例子。 步驟 1 建立一個介面:汽車的介面 Car.java public interface Car {

設計模式工廠模式

(一)學習spring中的工廠模式是如何具體來利用工廠模式的 先來看一下基礎知識 簡單工廠模式又叫靜態方法模式 一個抽象產品類,可以派生出多個具體產品類。一個具體工廠類,通過往此工廠的static方

javaSE (三十八設計模式 單例設計模式餓漢式/懶漢式、簡單工廠模式工廠模式、介面卡模式、模板方法設計模式

1、單例設計模式(餓漢式/懶漢式): 概念:保證類在記憶體中只有一個物件 思路: 私有構造方法,其他類不能再訪問該構造方法了 建立本類物件(就在本類裡建立),將物件的應用作為成員變數,並私有靜態化(在這裡又分為餓漢式和懶漢式,餓漢式直接引用連線物件,而懶漢式在第二步先建

C++設計模式——簡單工廠模式2

#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; //抽象的水果類 class Fruit { public: virtual void get

Python實現設計模式--02.工廠模式Factory Pattern

《設計模式》涉及到建立類的幾種模式,共同的也是最根本的原則就是:不要new物件!!!既然如此,告訴我你最先想到的是如何得到物件呢?沒錯,“你不讓我new,那你給我個get物件的工具吧,別的我不管”。這就是工廠模式,工廠模式是一種簡單又實用的模式,在各大框架到處可見,比如Ja

C++筆記 UML/設計模式簡單工廠模式工廠模式

一、UML(統一建模語言) 模型:對問題的書面上的無歧義文字或圖形的描述,簡言之,模型是對現實的簡化。 建模:對現實系統進行適當的過濾,用適當的表現規則描述出簡介的模型問題。 UML:是一種基於面向物件的視覺化建模語言。UML採用了一組形象畫的額圖形符號作為建模語言,使