工廠方法模式的java實現例子
說明:本文是《大話設計模式》一書的學習文摘和網上相關資訊文摘,原書程式碼例子用C#寫,下面用Java改寫。
1、工廠方法模式:定義一個用於建立物件的介面,讓子類決定例項化哪一個類。工廠方法使一個類的例項化延遲到其子類。
核心工廠類不再負責產品的建立,這樣核心類成為一個抽象工廠角色,僅負責具體工廠子類必須實現的介面,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠角色的情況下引進新的產品。2、工廠方法模式由4種角色組成:
(1)抽象工廠(Creator)角色:是工廠方法模式的核心,與應用程式無關。任何在模式中建立的物件的工廠類必須實現這個介面。
(2)具體工廠(Concrete Creator)角色:這是實現抽象工廠介面的具體工廠類,包含與應用程式密切相關的邏輯,並且受到應用程式呼叫以建立產品物件。
(3)抽象產品(Product)角色:工廠方法模式所建立的物件的超型別,也就是產品物件的共同父類或共同擁有的介面。
(4)具體產品(Concrete Product)角色:這個角色實現了抽象產品角色所定義的介面。某具體產品有專門的具體工廠建立,它們之間往往一一對應。
3、工廠方法模式的UML類圖
4、工廠方法和簡單工廠的區別
工廠方法模式把簡單工廠的內部邏輯判斷移到了客戶端程式碼來進行。
工廠方法模式是簡單工廠模式的衍生,首先完全實現開放-封閉原則,實現了可擴充套件。其次更復雜的層次結構,可以應用於產品結果複雜的場合。
5、下面實現一個加減乘除的工廠方法模式
package demo8; /** * 工廠介面 * */ interface IFactory { Operation CreateOperation(); } package demo8; /** * 具體工廠(Concrete Creator)角色:加法類工廠 * */ public class AddFactory implements IFactory { @Override public Operation CreateOperation() { return new OperationAdd(); } } package demo8; /** * 具體工廠(Concrete Creator)角色:減法類工廠 * */ public class SubFactory implements IFactory { @Override public Operation CreateOperation() { return new OperationSub(); } } package demo8; /** * 具體工廠(Concrete Creator)角色:乘法類工廠 * */ public class MulFactory implements IFactory { @Override public Operation CreateOperation() { return new OperationMul(); } } package demo8; /** * 具體工廠(Concrete Creator)角色:除法類工廠 * */ public class DivFactory implements IFactory { @Override public Operation CreateOperation() { return new OperationDiv(); } } package demo8; /** * 抽象產品(Product)角色:運算類 * */ public abstract class Operation { private double numberA = 0; private double numberB = 0; public void setNumberA(double numberA) { this.numberA = numberA; } public void setNumberB(double numberB) { this.numberB = numberB; } public double getNumberA() { return numberA; } public double getNumberB() { return numberB; } public double getResult() { double result = 0; return result; } } package demo8; /** * 具體產品(Concrete Product)角色:加法類 * */ public class OperationAdd extends Operation { @Override public double getResult() { double result = 0; result = super.getNumberA() + super.getNumberB(); return result; } } package demo8; /** * 具體產品(Concrete Product)角色:減法類 * */ public class OperationSub extends Operation { @Override public double getResult() { double result = 0; result = super.getNumberA() - super.getNumberB(); return result; } } package demo8; /** * 具體產品(Concrete Product)角色:乘法類 * */ public class OperationMul extends Operation { @Override public double getResult() { double result = 0; result = super.getNumberA() * super.getNumberB(); return result; } } package demo8; /** * 具體產品(Concrete Product)角色:除法類 * */ public class OperationDiv extends Operation { @Override public double getResult() { double result = 0; if (super.getNumberB() == 0) throw new ArithmeticException("除數不能為0."); result = super.getNumberA() / super.getNumberB(); return result; } } package demo8; /** * 客戶端 * */ public class Demo8 { public static void main(String[] args) { IFactory operFactory = new AddFactory(); Operation oper = operFactory.CreateOperation(); oper.setNumberA(10); oper.setNumberB(7); double result = oper.getResult(); System.out.println(result); } }
相關推薦
工廠方法模式(JAVA反射)
簡單工廠模式的不足 在簡單工廠模式中,只提供了一個工廠類,該工廠類處於對產品類進行例項化的中心位置,它知道每一個產品物件的建立細節,並決定何時例項化哪一個產品類。簡單工廠模式最大的缺點是當有新產品要加入到系統中時,必須修改工廠類,加入必要的處理邏輯,這違背了“
【Spring原始碼解析】FactoryBean-工廠方法模式的實現及使用
一、工廠方法模式中的三種模式的特點 工廠模式中的三種模式,分別是:簡單工廠模式、工廠方法模式、抽象工廠模式,三種分別是什麼,以及適合場景是什麼? (1)簡單工廠模式:一個抽象介面對應一個產品介面,特定產品實現這個介面,針對不同產品都可以在同一個工廠中生產,同一個工廠生產產品可以通過多種方式,單生產方法(通
工廠方法模式的java實現例子
說明:本文是《大話設計模式》一書的學習文摘和網上相關資訊文摘,原書程式碼例子用C#寫,下面用Java改寫。 1、工廠方法模式:定義一個用於建立物件的介面,讓子類決定例項化哪一個類。工廠方法使一個類的例項化延遲到其子類。 核心工廠類不再負責產品的建立,這樣核心類成為一個抽象
java常用設計模式--工廠方法模式簡單例子
package com.ruanyun;/** * @Auther: maxw * @Date: 2018/11/12 11:02 * @Description:工廠方法模式:有四個角色,抽象工廠模式,具體工廠模式,抽象產品模式,具體產品模式。不再是由一個工廠類去例項化具體的產品,而是由抽象工廠的子類去例項化
通過例子學設計模式之--工廠方法模式以及使用場景說明(C++實現)
簡單工廠模式有如下問題: (1)工廠類職責不單一。比如裝置類工廠,工廠一併生產USB,並口,串列埠,等等之類的裝置,職責不單一,而且switch--case分支有可能比較多。 (2)違背開閉原則。比如裝置類工廠,增加一個WIF
Java設計模式菜鳥系列(四)工廠方法模式建模與實現
工廠方法模式(Factory Method) 工廠方法:顧名思義,就是呼叫工廠裡的方法來生產物件(產品)的。 工廠方法實現方式有3種: 一、普通工廠模式。就是建立一個工廠類,對實現了同一介面的一些
簡單工廠模式的java實現例子
說明:本文是《大話設計模式》一書的學習文摘和網上相關資訊文摘,原書程式碼例子用C#寫,下面用Java改寫。 1、簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法模式。 它的實現方式是由一個工廠類根據傳入的引數,動態決定應該建立哪一個產品類(這些產品類繼承自一個父類或介面)
Java實現工廠方法模式
8.3 工廠方法模式實現 將之前簡單工廠實現的計算器以工廠方法模式去實現。 結構圖 先構建一個工廠介面 public interface IFactory { Operation createOperation(); } 加減乘除各建一
設計模式之—工廠方法模式(FactoryMethod)-Java實現
工廠方法(FactoryMethod): 定義一個用於建立物件的介面,讓子類決定將哪一個類例項化。Factory Method 使一個類的例項化延遲到其子類。 工廠方法模式,這個方法有效地解決了簡單工廠模式擴充套件性差的問題,想要進行擴充套件,只需要新加類就行,不需要更改原
設計模式C++實現——工廠方法模式
對象 類型 begin 創建對象 dia rate rod rtu log 模式定義: 工廠方法模式定義了一個創建對象的接口,但由子類決定要實例化的類是哪一個。工廠方法讓類把實例化推遲到子類。 模式結構: Creator是一個類,它
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設計模式(一)之建立型模式:工廠模式(簡單工廠模式+工廠方法模式)
在面向物件程式設計中, 最通常的方法是一個new操作符產生一個物件例項,new操作符就是用來構造物件例項的。但是在一些情況下, new操作符直接生成物件會帶來一些問題。舉例來說,許多型別物件的建立需要一系列的步驟:你可能需要計算或取得物件的初始位置;選擇生成哪個子物件例項;或在你生成你需要的物件