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