1. 程式人生 > >設計模式學習日誌之二--工廠方法模式

設計模式學習日誌之二--工廠方法模式

工廠模式,屬於建立型設計模式,需要生成的物件叫做產品,生成物件的地方叫做工廠

簡單工廠模式

舉個例子

建立一個麵條基類(或者介面)這是產品的抽象類

public abstract class INoodles {    /**     * 描述每種麵條啥樣的     */  
  public abstract void desc();
}

建立之後,來一份蘭州拉麵

public class LzNoodles extends INoodles {
    @Override  
  public void desc() {       
    System.out.println("蘭州拉麵 上海的好貴 家裡才5 6塊錢一碗");  
  }
}

泡麵

public class PaoNoodles extends INoodles {   
@Override   
 public void desc() { 
       System.out.println("泡麵好吃 可不要貪杯");   
 }
}

幹扣面

public class GankouNoodles extends INoodles {  
  @Override   
 public void desc() {   
     System.out.println("還是家裡的幹扣面好吃 6塊一碗");  
  }
}

之後我們要有個麵館去做面

public class SimpleNoodlesFactory {
  public static final int TYPE_LZ = 1;//蘭州拉麵  
  public static final int TYPE_PM = 2;//泡麵   
  public static final int TYPE_GK = 3;//幹扣面   
  public static INoodles createNoodles(int type) {      
  switch (type) {          
  case TYPE_LZ:         
       return new LzNoodles(); 
  case TYPE_PM:    
       return new PaoNoodles();
  case TYPE_GK:       
       default:             
  return new GankouNoodles();     
                 }    
        }
}

這個麵館就提供三種麵條,你要啥就給啥

/**
 * 簡單工廠模式
 */
 INoodles noodles = SimpleNoodlesFactory.createNoodles(SimpleNoodlesFactory.TYPE_GK);
 noodles.desc();

特點:

1.它是一個具體的類,非介面抽象類。有一個重要的create()方法,利用if或者switch建立產品並返回

2.create()方法通常是靜態的,所以也稱之為靜態工廠

缺點

1.擴充套件性差,比如我要多一種麵條,就要去新增一個麵條產品類,需要修改工廠類方法

優點

1.利用了多型性不管什麼具體產品都返回抽象產品,即不用一個一個麵條去new,再去呼叫desc方法

2.利用了封裝性,內部產品發生變化時外部使用者不會受到影響

工廠方法模式

普通工廠就是把簡單工廠中具體的工廠類,劃分成兩層:抽象工廠層+具體的工廠子類層

麵條工廠(抽象工廠類),作用就是生產麵條

public abstract class NoodlesFactory {
    public abstract INoodles create();
}

拉麵工廠(具體子類)

public class LzFactory extends NoodlesFactory {
    @Override
    public INoodles create() {
        return new LzNoodles();
    }
}

泡麵工廠(具體子類)

public class PaoFactory extends NoodlesFactory {
    @Override
    public INoodles create() {
        return new PaoNoodles();
    }
}

幹扣面工廠(具體子類)

public class GankouFactory extends NoodlesFactory {
    @Override
    public INoodles create() {
        return new GankouNoodles();
    }
}

使用的時候

NoodlesFactory factory1 = new GankouFactory();
INoodles gk3 = factory1.create();
gk3.desc();

普通工廠和簡單工廠模式的區別

做出來的產品要抽象,工廠也應該要抽象

工廠方法使一個產品類的例項化延遲到具體工廠子類

好處就是當需要變化時,只需要增刪響應的類,不需要修改已有的類

而簡單工廠需要修改工廠的create()方法,多方法靜態工廠模式需要增加一個靜態方法

缺點就是,如果我們需要每次新增一個產品類,也要新增一個具體工廠類。



相關推薦

設計模式學習日誌--工廠方法模式

工廠模式,屬於建立型設計模式,需要生成的物件叫做產品,生成物件的地方叫做工廠簡單工廠模式舉個例子建立一個麵條基類(或者介面)這是產品的抽象類public abstract class INoodles { /** * 描述每種麵條啥樣的 */ p

設計模式學習系列——工廠方法模式(Factory Method)

工廠模式是我們最常用的模式了,著名的Jive論壇 ,就大量使用了工廠模式,工廠模式在Java程式系統可以說是隨處可見。     為什麼工廠模式是如此常用?因為工廠模式就相當於建立例項物件的new,我們經常要根據類Class生成例項物件,如:     A a = new A (

設計模式筆記工廠方法模式

工廠方法模式 為什麼引入工廠方法模式? 當我們需要建立多個例項的時候,而這些類又是有著公共的方法,區別就是實現的具體操作不同,我們需要專門為這些類建立例項,但是,如果我們沒有建立這些的類的許可權的時候,(並不是說我們真沒有new方法,而是外在的因素)我們需要找一個可以幫我

設計模式工廠方法模式

1、工廠方法模式(Factory Method) 簡單工廠模式有一個問題就是,類的建立依賴工廠類,也就是說,如果想要拓展程式,必須對工廠類進行修改,這違背了閉包原則,所以,從設計角度考慮,有一定的問題,如何解決?就用到工廠方法模式,建立一個工廠介面和建立多個工廠實現類,

設計模式—2.工廠方法模式

eat oid com 靜態 () img clas image 簡單工廠模式 1.工廠方法模式定義 定義一個用於創建對象的接口,讓子類決定具體實例話哪一個類。 2.通用實現方式 工廠方式通用實現方式類圖如下: 其中Product定義了產品的共性,是對事物的抽象,Crea

C#設計模式工廠方法模式

工廠方法模式(Factory Method): 定義一個用於建立物件的介面,讓子類決定例項化哪一個類。工廠方法使一個類的例項化延遲到其子類 回顧之前簡單工廠 簡單工廠的核心程式碼 class OperationFactory { public

設計模式()工廠方法模式

設計模式(二):工廠方法模式 Github 關於23設計模式的講解檔案已經放在我的GitHub上,歡迎大家Fork和Star 模式動機 ​ 在簡單工廠模式中,如果在原來的實現的基礎上,我們再增加一個產品類的實現,那麼我們必須在原來的工廠方法裡

設計模式() 工廠方法模式

關閉 做的 vat aid 降價 mys 四川 運營 維護 layout: post title: 設計模式(二) 工廠方法模式 tags: Design_Patterns categories: Design_Patterns description: 使用了簡單工廠

【重溫設計模式003工廠方法模式

[【重溫設計模式系列原始碼】](https://github.com/ithinksky/java-patterns) > 工廠方法模式 # 基本原理 ## 含義 > 工廠方法模式又稱為工廠模式、多型工廠模式和虛擬構造器模式。 > 通過定義工廠父類負責定義建立物件的公共介面,而子類則負責生成具體的物件

設計模式(2):工廠方法模式

sys 實例化 不同 err reat inter 設計 end 泛型 工廠方法模式: ? 定義: ? 定義一個用於創建對象的接口,讓子類決定實例化哪一個類。工廠方

Java設計模式菜鳥系列(四)工廠方法模式建模與實現

工廠方法模式(Factory Method) 工廠方法:顧名思義,就是呼叫工廠裡的方法來生產物件(產品)的。 工廠方法實現方式有3種: 一、普通工廠模式。就是建立一個工廠類,對實現了同一介面的一些

23種設計模式(2):工廠方法模式

定義:定義一個用於建立物件的介面,讓子類決定例項化哪一個類,工廠方法使一個類的例項化延遲到其子類。 型別:建立類模式 類圖: 工廠方法模式程式碼 interface IProduct { public void productMethod(); } class Pro

24種設計模式優缺點及適用場景#工廠方法模式

產品 抽象 彌補 用戶 裏氏替換原則 一個 延伸 無需 可擴展 創建型#工廠方法模式 概述:   工廠方法是簡單工廠模式的延伸,它繼承了簡單工廠模式的優點,同時還彌補了簡答工廠模式的不足。工廠方法是最常用的設計模式之一,很多開源框架和API類庫的核心模式。 優點:

單例模式(singleton),工廠方法模式(factory),門面模式(facade)

CEmperor,需要單例的類 說明:很多大臣拜見的皇帝,只有一個。體現在面向物件方面,CEmperor定義一個靜態指標,和一個靜態函式,私有化建構函式、解構函式、建構函式複製、過載賦值語句。 注意:執行緒安全,採用互斥體的方式實現。 Public class Si

模板方法模式( Template Method Pattern ): 工廠方法模式的情侶

參考書籍: 《Design Patterns: Elements of Reusable Object-Oriented Software》 模板方法模式和工廠方法模式分別隸屬於行為模式(Behavioral Pattern)和建立類模式(建立型模式),

Java學習筆記——設計模式五.工廠方法

strong scanner multipl 石頭 simple 決定 定義 opera 下使用 水邊一只青蛙在笑       ——石頭和水 工廠方法模式(Factory Method),定義了一個用於創建對象的接口,讓實現類決定實例化哪一個類。工廠方法使一個類的實

Java十三設計模式------工廠方法模式

分享 出現 角度 郵件 並且 拓展 如何 調用 三種 一、工廠方法模式 工廠方法模式有三種 1、普通工廠模式:就是建立一個工廠類,對實現了同一接口的一些類進行實例的創建。首先看下關系圖: 舉例如下:(我們舉一個發送郵件和短信的例子) 首先,創建二者的共同接口:

設計模式工廠方法模式

定義 工廠方法模式又稱為工廠模式,也叫虛擬構造器(Virtual Constructor)模式或者多型工廠模式(Polymorphic Factory),在工廠方法模式中,父類負責定義建立物件的公共介面,而子類則負責生成具體的物件,這樣做的目的是將類的例項化操作延遲到子類中完

設計模式學習筆記02--工廠方法模式

1.工廠方法模式:      定義一個用於建立物件的介面,讓子類決定例項化哪一個類,工廠方法使一個類的例項化延遲到其子類     類圖:                                         根據定義可知:     這個模式有四個角色 :產

工廠三兄弟工廠方法模式(一):日誌記錄器的設計

簡單工廠模式雖然簡單,但存在一個很嚴重的問題。當系統中需要引入新產品時,由於靜態工廠方法通過所傳入引數的不同來建立不同的產品,這必定要修改工廠類的原始碼,將違背“開閉原則”,如何實現增加新產品而不影響已有程式碼?工廠方法模式應運而生,本文將介紹第二種工廠模式——