以Java程式碼為例講解設計模式中的簡單工廠模式
簡單來說,工廠模式就是按照需求來返回一個類型的對象,使用工廠模式的意義就是,如果對象的實例化與代碼依賴太大的話,不方便進行擴展和維護,使用工廠的目的就是使對象的實例化與主程式碼就行解耦.來具體看一下:
1. 簡單工廠模式簡介
簡單工廠模式(Simple Factory),又被稱為"靜態工廠方法模式"。它屬於"創建模式"(創建物件的模式),並且是"工廠方法"模式的一種特殊實現。
通常,我們利用簡單工廠模式來進行類別的創建。例如,取得線程池對象,就是透過簡單的工廠模式來實現。它的結構圖如下所示:
工廠:工廠是簡單工廠模式的核心,提供了對外介面。客戶端或其它程式要取得Product對象,都是透過Factory的介面來取得的。
抽象產品:抽象產品是(許多)不同產品抽象化的。 Product可以是介面或是抽象類別。
具體產品:工廠中傳回的產品對象,實際上是透過ConcreteProduct來創建的。
2. 簡單工廠模式代碼模型
public class Factory { public static Product newInstance() { return new ConcreteProduct(); } } public abstract Product { } public class ConcreteProduct extends Product { public ConcreteProduct() {} }
3.簡單工廠模式的實際應用
我們在寫一個Servlet處理客戶端請求的時候,往往會一個Servlet處理多個業務邏輯, 例如:
protected void doPost(HttpServletRequest request, HttpServletResponse response) { String flag = request.getParameter("flag"); if(flag.equals("service1")) { service1(); }else if(flag.equals("service2")) { service2(); } ... }
以上是我們的Servlet處理多業務邏輯的常規方法, 寫一坨if else語句。一個比較好的方法就是, 將請求的分發與Servlet分離, 讓Servlet只處理業務邏輯。我們把各種請求的Servlet看做產品類, javax.servlet.HttpServlet是產品父類, javax.servlet.Servlet是產品接口, 這樣我們定義一個ServletFactory, 在過濾器裡解析url請求並交給ServletFactory來處理就可以了。 這就是一個典型的簡單工廠應用。
@WebFilter("/TransRequest") public class TransRequest implements Filter{ private String servletName; @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest myRequest = (HttpServletRequest)request; //拿到请求的servlet名字, 这里我们约定请求都是/servletName形式 String names[] = myRequest.getRequestURI().trim().split("/"); servletName = names[2]; if( servletName != null) { //以下是最典型的两句简单工厂的例子 Servlet servlet = ServletFactory.createServlet(servletName); servlet.service(request, response); }else chain.doFilter(request, response); }
每次來一個請求我們用工廠生產一個servlet, 這樣可以免去在xml配置大量的servlet路徑資訊比較方便。而且這樣也會讓邏輯更加清晰, servlet只是在業務層處理業務。
工廠類別如下:
public class ServletFactory { public static Servlet createServlet(String servletName) throws ServletException { if(servletName.equals("servletName1")) { return new Service1(); }else if(servletName.equals("servletName2")){ return new Service2(); }else{ throw new ServletException("No such servlet"); } } }
上面的工廠類雖然沒有拋開繁瑣的if else, 但是利用簡單工廠的思想仍然解決了一些問題。簡單工廠是非常簡單的一種不算是設計模式的設計模式, 解決的問題也很有限。 以上請求分發各大javaEE 框架都已實現, 例如Struts2, 當然框架不是用的簡單工廠。
4.總結
簡單工廠模式, 總結起來就是一個工廠類,一個產品接口(其實也可以是一個抽象類,甚至一個普通的父類)和一群實現了產品接口的具體產品,而這個工廠類,根據傳入的參數去創造一個具體的實現類,並向上轉型為介面作為結果返回。
以上就是以Java程式碼為例講解設計模式中的簡單工廠模式的內容,更多相關內容請關注PHP中文網(www.php.cn)!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

膠囊是一種三維幾何圖形,由一個圓柱體和兩端各一個半球體組成。膠囊的體積可以通過將圓柱體的體積和兩端半球體的體積相加來計算。本教程將討論如何使用不同的方法在Java中計算給定膠囊的體積。 膠囊體積公式 膠囊體積的公式如下: 膠囊體積 = 圓柱體體積 兩個半球體體積 其中, r: 半球體的半徑。 h: 圓柱體的高度(不包括半球體)。 例子 1 輸入 半徑 = 5 單位 高度 = 10 單位 輸出 體積 = 1570.8 立方單位 解釋 使用公式計算體積: 體積 = π × r2 × h (4
