国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

以Java代碼為例講解設計模式中的簡單工廠模式

2019-11-26 14:21:16
字體:
來源:轉載
供稿:網友

1. 簡單工廠模式簡介
簡單工廠模式(Simple Factory),又被稱為"靜態工廠方法模式"。它屬于"創建模式"(創建對象的模式),并且是"工廠方法"模式的一種特殊實現。
通常,我們利用簡單工廠模式來進行類的創建。例如,獲取線程池對象,就是通過簡單工廠模式來實現的。它的結構圖如下所示:

201651294056383.jpg (280×151)

工廠:工廠是簡單工廠模式的核心,提供了對外接口。客戶端或其它程序要獲取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() {}}

模型的類圖

201651294129206.jpg (361×151)

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.總結

簡單工廠模式, 總結起來就是一個工廠類,一個產品接口(其實也可以是一個抽象類,甚至一個普通的父類)和一群實現了產品接口的具體產品,而這個工廠類,根據傳入的參數去創造一個具體的實現類,并向上轉型為接口作為結果返回。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 师宗县| 永康市| 合肥市| 鹤山市| 汉中市| 富顺县| 诸城市| 河西区| 应城市| 新兴县| 山阳县| 南康市| 石渠县| 丹寨县| 比如县| 阿拉尔市| 海安县| 邓州市| 广丰县| 牡丹江市| 河源市| 铁岭县| 乌什县| 贡山| 进贤县| 阳高县| 茂名市| 塘沽区| 确山县| 苏尼特左旗| 得荣县| 黄平县| 沾化县| 临邑县| 壶关县| 宁夏| 临高县| 上杭县| 大足县| 隆尧县| 上饶县|