1. 程式人生 > >Java實現工廠方法模式

Java實現工廠方法模式

8.3 工廠方法模式實現

將之前簡單工廠實現的計算器以工廠方法模式去實現。

結構圖
這裡寫圖片描述
先構建一個工廠介面

public interface IFactory {
    Operation createOperation();
}

加減乘除各建一個類去實現這個介面

//加法類工廠
class AddFactory implements IFactory {

    public Operation createOperation(){
        return new OperationAdd();
    }
}

//...類似

客戶端

IFactory operFactory = new
AddFactory(); Operation oper = operFactory.createOperation(); oper.setNumberA(1); oper.setNumberB(2); double result = oper.getResult();

8.4 簡單工廠VS工廠方法

簡單工廠中,增加一個運算,先建立一個具體運算類實現運算介面,並在簡單工廠中增加判斷條件,加入這個新運算類。

工廠方法則是,增加運算類,再增加相關工廠類,再修改客戶端,相當於複雜度增加,還添加了很多類和方法。

原先修改簡單工廠中的方法,增加判斷條件,修改原有類,違背開放-封閉原則

作用
工廠方法定義一個用於建立物件的介面,讓子類決定例項化哪個類。工廠方法使一個類的例項化延遲到其子類。

這裡寫圖片描述

問題
客戶端需要決定例項化哪一個工廠來實現運算類,選擇判斷的問題還是存在。
工廠方法把簡單工廠內部邏輯判斷移到了客戶端程式碼來進行。
如果想要加功能,本來是改工廠類,現在修改客戶端。

8.5 雷鋒工廠

雷鋒代表一種精神,可以幫助老人掃地、洗衣、買米等。
大學生可以是雷鋒,志願者也可以是雷鋒。

//雷鋒介面
public interface LeiFeng{
    public void sweep();

    public void wash
(); public void buyRice(); }

學雷鋒的大學生/志願者實現雷鋒精神!

class ColleageStudent implements LeiFeng{
    //...實現三個類
}

//志願者
class Volunteer implements LeiFeng{
    //...
}

簡單雷鋒工廠

public class SimpleFactory {
    public static LeiFeng createLeiFeng(String type){
        LeiFeng result = null;
        switch(type){
            case "大學生":
                result = new ColleageStudent();
                break;
            case "志願者":
                result = new Volunteer();
                break;
            default:break;
        }
        return result;
    }
}

//客戶端
LeiFeng studentA = SimpleFactory.createLeiFeng("大學生");
student.bugRice();

用工廠方法分拆SimpleFactory

interface IFactory{
    LeiFeng createLeiFeng();
}

//學雷鋒的大學生工廠
class ColleageStudentFactory implements IFactory {
    public LeiFeng createLeiFeng(){
        return new ColleageStudent();
    }
}

//志願者工廠
class VolunteerFactory implements IFactory {
    public LeiFeng createLeiFeng(){
        return new Volunteer();
    }
}

//客戶端呼叫
IFacotry factory = new ColleageStudentFactory();
LeiFeng student = factory.createLeiFeng();

student.bugRice();
student.sweep();
student.wash();

缺點:每加一個產品,就加一個產品工廠的類,增加額外開發量。

避免修改客戶端的程式碼方法:利用反射避免分支判斷的問題。

相關推薦

Java實現工廠方法模式

8.3 工廠方法模式實現 將之前簡單工廠實現的計算器以工廠方法模式去實現。 結構圖 先構建一個工廠介面 public interface IFactory { Operation createOperation(); } 加減乘除各建一

設計模式C++實現——工廠方法模式

對象 類型 begin 創建對象 dia rate rod rtu log 模式定義: 工廠方法模式定義了一個創建對象的接口,但由子類決定要實例化的類是哪一個。工廠方法讓類把實例化推遲到子類。 模式結構: Creator是一個類,它

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

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

工廠方法模式java實現例子

說明:本文是《大話設計模式》一書的學習文摘和網上相關資訊文摘,原書程式碼例子用C#寫,下面用Java改寫。 1、工廠方法模式:定義一個用於建立物件的介面,讓子類決定例項化哪一個類。工廠方法使一個類的例項化延遲到其子類。 核心工廠類不再負責產品的建立,這樣核心類成為一個抽象

設計模式之—工廠方法模式(FactoryMethod)-Java實現

工廠方法(FactoryMethod): 定義一個用於建立物件的介面,讓子類決定將哪一個類例項化。Factory Method 使一個類的例項化延遲到其子類。 工廠方法模式,這個方法有效地解決了簡單工廠模式擴充套件性差的問題,想要進行擴充套件,只需要新加類就行,不需要更改原

Java設計模式(創建型:工廠方法模式)

out nbsp 操作 短信發送 ora print temp ati ural (該文內容為原創,有不足之處望多多指教!) 設計模式根據目的準則可以分為三類: 創建型:creational 創建型的設計模式與對象的創建有關。 結構型:Structural 處理類和

工廠方法模式Java與Kotlin版)

http www pattern static 難度 microsoft 運行時 sta 父類 前文推送 設計模式 簡單工廠模式(Java與Kotlin版) Kotlin基礎知識 Kotlin入門第一課:從對比Java開始 Kotlin入門第二課:集合

JAVA模式》之工廠方法模式

ktv bwt dex zoho ase lba dmg bps rpc 在閻宏博士的《JAVA與模式》一書中開頭是這樣描述工廠方法模式的:   工廠方法模式是類的創建模式,又叫做虛擬構造子(Virtual Constructor)模式或者多態性工廠(Polymorphic

Java工廠方法模式

ace 工廠 @class int ret 類工廠 2014年 implement package 工廠方法模式: /** * 工廠方法模式:也叫工廠模式,屬於創建型模式,父類工廠(接口)負責定義產品對象的公共接口, * 而子類工廠負責創建具體的產品對象。 * 目的:

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

必須 產品 str 應用程序 實現 工廠方法模式 調用 方法 png 角色 抽象工廠:擔任這個角色是工廠方法模式的核心,它是與應用程序無關的。任何在模式中創建對象的工廠類都必須實現這個接口。 具體工廠:擔任這個角色的是實現了抽象工廠接口的具體Java類。具體工廠角色含有與應

Java設計模式百例 - 工廠方法模式

java設計模式本文源碼見:https://github.com/get-set/get-designpatterns/tree/master/factory-method工廠方法模式同簡單工廠模式一樣,也是創建類模式,又叫做虛擬構造(Virtual Constructor)模式或多態工廠(Polymorph

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

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

Java設計模式-工廠方法模式(Factory Method)

print blog -i pri cnp 三種模式 image void share 工廠方法模式(Factory Method) 工廠模式適合:凡是出現了大量的產品需要創建,並且具有共同的接口時,可以通過工廠方法模式進行創建。在以下的三種模式中,第一種如果傳入的字符串

Java設計模式學習記錄-簡單工廠模式工廠方法模式

static ip ofa 關心 有一個 就是 con 14. 對比 div 前言 之前介紹了設計模式的原則和分類等概述。今天開啟設計模式的學習,首先要介紹的就是工廠模式,在介紹工廠模式前會先介紹一下簡單工廠模式,這樣由淺入深來介紹。 簡單工廠模式 做法:創建一個工

Java實現生產者消費者模式的兩種方法

1、 利用 Object的 wait/notify,和非阻塞佇列實現 import java.util.PriorityQueue; public class Test{ private int size=10; private PriorityQueue&

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

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

Java 設計模式工廠方法模式與抽象工廠模式

一、前期回顧 上一篇《Java設計模式之單例模式》詳細介紹了單例模式,介紹了單例模式的使用場景,優缺點,同時也寫了兩種常見的單例模式寫法,懶漢式單例模式和餓漢氏單例模式,當然,單例模式的寫法還有很多,比如,列舉單例模式,靜態內部類單例模式等。有興趣的可以自行查詢資料。本篇開始介紹單例

java常用設計模式--工廠方法模式簡單例子

package com.ruanyun;/** * @Auther: maxw * @Date: 2018/11/12 11:02 * @Description:工廠方法模式:有四個角色,抽象工廠模式,具體工廠模式,抽象產品模式,具體產品模式。不再是由一個工廠類去例項化具體的產品,而是由抽象工廠的子類去例項化

java高階設計模式工廠方法模式

一、定義 定義一個用於建立物件的介面,讓子類決定例項化哪一個類,FactoryMethod使一個類的例項化延遲到其子類。 二、結構和說明 三、簡單例項(直接複製了,不貼圖) public class ConcreteCreator extends Creator { &nb

Java設計模式工廠方法模式&抽象工廠模式

工廠方法模式與抽象工廠模式都是設計模式中重要而且常見的模式。       工廠方法模式:定義一個用於建立物件的介面,讓子類決定例項化哪一個類。工廠方法使一個類的例項化延遲到其子類。 通用類圖如下: