国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

JAVA設計模式:工廠模式之簡單工廠

開發 后端
在java中,設計模式是多態和封裝的重要表現形式,采用設計模式能夠極大地提升可維護性和可擴展性,那么,同樣工作在jvm上面的Clojure能否運用這些模式,或者說是否同樣需要這些模式呢?

在java中,設計模式是多態和封裝的重要表現形式,采用設計模式能夠極大地提升可維護性和可擴展性,那么,同樣工作在jvm上面的Clojure能否運用這些模式,或者說是否同樣需要這些模式呢?

注:本文基于jdk1.6和Clojure1.2

簡單工廠

先看看簡單工廠的java代碼:

首先定義產品的接口:

  1. public interface IProduct {  
  2.  
  3.     /**  
  4.      * 使用產品  
  5.      * @param msg  
  6.      */ 
  7.     public void use(String msg);  

然后是實現了這個接口的兩個具體產品Product1和Product2:

  1. public class Product1 implements IProduct {  
  2.  
  3.     @Override 
  4.     public void use(String msg) {  
  5.         System.out.println("Product1 use:"+msg);  
  6.     }  
  7.  
  8. }  
  9.  
  10. public class Product2 implements IProduct {  
  11.  
  12.     @Override 
  13.     public void use(String msg) {  
  14.         System.out.println("Product2 use:"+msg);  
  15.     }  
  16.  

***是根據類型獲取產品的簡單工廠:

  1. public class SimpleFactory {  
  2.  
  3.     /**  
  4.      * 根據產品類型生產產品  
  5.      * @param productType  
  6.      * @return  
  7.      */ 
  8.     public static IProduct factory(String productType){  
  9.         if(productType.equals("1"))  
  10.             return new Product1();  
  11.         else if(productType.equals("2"))  
  12.             return new Product2();  
  13.         return null;  
  14.     }  

這樣,我們在java中就構建了能夠生產出兩個不同產品的簡單工廠了。接下來,我們調用一下:

  1. /**  
  2.  * 簡單工廠調用  
  3.  * @author RoySong - 2011-10-27  
  4.  */ 
  5. public class SimpleFactoryTest {  
  6.  
  7.     /**  
  8.      * @param args  
  9.      */ 
  10.     public static void main(String[] args) {  
  11.         IProduct product1 = SimpleFactory.factory("1");  
  12.         product1.use("something");  
  13.           
  14.         IProduct product2 = SimpleFactory.factory("2");  
  15.         product2.use("something");  
  16.     }  
  17.  

運行這個調用程序,我們能夠得到預期的結果:

  1. Product1 use:something  
  2. Product2 use:something 

那么,在Clojure中應該如何實現呢?

#p#

首先,讓我們再回顧一下采用簡單工廠的目的,這是為了將業務對象的產生和業務方法的執行進行解耦,使得業務方法執行時無須關注業務對象的類型。為了達到這個目的,我們提取了業務對象的接口IProduct(在實際的應用中也有可能是一個父類Product),它的里面包含了所有業務對象的共同操作use(在實際應用中可能不止這一種業務操作,當然也不叫use)的方法聲明。然后,由SimplyFactory來創建IProduct的實例對象,然后調用use業務方法。在這個時候,調用方法是無須關注被調用的具體是哪個實例對象--Product1還是Product2。

好吧,為了業務對象的產生和業務方法的執行解耦。然后,Clojure中沒有對象一說,方法倒是有,不過叫做函數。于是,問題解決了,沒有對象,則無須對對象的產生進行解耦。本文結束。

拋開上面的文字游戲不談,實際上Clojure的解決方式更為靈活,這是由其語言特性所決定的。在java中,一切都是對象(除了原始類型),而類和接口是對象的定義,包含了有關對象動作方式的相關信息,比如名稱、方法、屬性和事件等。所以,在java應用中,能夠使用的最小粒度的東西就是對象,如果需要調用某個實例方法,首先需要實例化某個對象,然后調用這個對象的方法;如果需要調用某個靜態方法,需要找到靜態方法所屬的類,然后以類名.方法名的形式來調用。而在Clojure中,函數是***類對象,它無須依附對象或者類而存在(實際上,在幾乎所有的函數式編程語言中都是這樣)。換句話說,我們調用某個方法無須首先實例化某個對象或者找到某個類。

那么,針對上面的例子,我們可以說,實際上我們需要的是根據不同的類型獲取兩個不同的業務處理方法而已。

  1. (defn simply-factory [type]  
  2.     (cond  
  3.       (= 1 type) (fn [msg] (println "Product1 use:" msg))  
  4.       (= 2 type) (fn [msg] (println "Product2 use:" msg)))) 

在上面的代碼中,我們定義了一個函數simply-factory,它接受一個參數type,然后根據type的值為1或者2返回對應的函數。實際上,我們從內容上可以看出來,這兩個函數就分別對應了之前我們定義的Product1和Product2中的use方法。

接下來,我們就看看調用和產生的輸出:

  1. user> ((simply-factory 1"something")  
  2. Product1 use: something  
  3. nil  
  4. user> ((simply-factory 2"something")  
  5. Product2 use: something  
  6. nil 

已經達到了我們之前想要的結果,對不對?讓我們再看看調用方法的代碼((simply-factory 1) "something"),(simply-factory 1)代表傳入參數1調用simply-factory函數,返回的是一個匿名函數;而((simply-factory 1) "something")整體就代表將"something"傳入simply-factory函數返回的匿名函數,然后我們就得到了預期的結果:Product1 use: something。我相信你已經看出來了,Clojure中函數的調用方式是:(函數名 參數)這個樣子的。

不過這個樣子跟上面的java代碼似乎差別有點大,讓我們對這個調用方式做一點小小的修改:

  1. user> (def product1 (simply-factory 1))  
  2. #'user/product1  
  3. user> (product1 "something")  
  4. Product1 use: something  
  5. nil  
  6. user> (def product2 (simply-factory 2))  
  7. #'user/product2  
  8. user> (product2 "something")  
  9. Product2 use: something  
  10. nil 

這樣子應該就能夠和之前的java代碼一一對應了,其中

  1. IProduct product1 = SimpleFactory.factory("1"); 

對應

  1. (def product1 (simply-factory 1)) 

,而

  1. product1.use("something"); 

對應

  1. (product1 "something"

這樣子是不是就能看得更明白一些了?不過要注意的是,雖然調用形式看起來很類似,但是在Clojure中product1是個函數,而java中product1是個對象。

原文鏈接:http://songry.iteye.com/blog/1218694

編輯推薦:

  1. JavaScript異步編程之Jscex無創痕切入jQueryUI
  2. 深入淺出Rhino:Java與JS互操作
  3. Java中的IO整理完整版
  4. Java編程中影響性能的一些特點
  5. 在LUA中如何調用JAVA方法
責任編輯:林師授 來源: songry的博客
相關推薦

2021-03-06 22:50:58

設計模式抽象

2020-08-21 07:23:50

工廠模式設計

2011-07-21 14:33:02

設計模式

2010-04-19 09:30:00

工廠模式PHP設計模式

2009-01-15 10:55:29

JavaScript設計模式抽象工廠

2022-01-12 13:33:25

工廠模式設計

2022-05-09 08:04:50

工廠模式設計模式

2015-11-03 09:43:43

avascript設計模式工廠模式

2020-10-19 09:28:00

抽象工廠模式

2021-09-29 13:53:17

抽象工廠模式

2011-07-28 09:50:58

設計模式

2019-08-16 10:46:46

JavaScript工廠模式抽象工廠模式

2024-09-23 08:30:48

2020-08-11 11:20:30

Typescript設計模式

2024-09-14 08:24:44

設計模式抽象工廠模式JDK

2024-07-31 08:12:33

2013-11-26 16:29:22

Android設計模式

2024-03-06 13:19:19

工廠模式Python函數

2010-10-09 09:25:35

Python工廠模式

2023-05-05 06:39:52

Java工廠設計模式
點贊
收藏

51CTO技術棧公眾號

久久视频这里有精品| 国内激情视频在线观看| 欧美久久成人| 亚洲52av| 国产一区二区三区日韩| 国产精品激情av在线播放| 日韩在线综合网| 激情91久久| 欧美影院在线播放| 成人免费视频网站在线看| 全国精品久久少妇| 91理论片午午论夜理片久久| 日韩av黄色| 成人午夜伦理影院| 亚洲人成77777在线观看网| 日本一区二区在线视频观看| 视频一区二区三区国产| 93久久精品日日躁夜夜躁欧美| 91精品视频一区| 成人偷拍自拍| 日本一区二区三区dvd视频在线| 久久综合中文色婷婷| jizzjizz欧美69巨大| 欧美人交a欧美精品| 成人福利av| 成熟亚洲日本毛茸茸凸凹| 国产乱码一区| 日韩特级毛片| 色香蕉成人二区免费| 国产真实伦在线观看| 久久久噜噜噜久噜久久综合| 男女h黄动漫啪啪无遮挡软件| 在线高清一区| 国产传媒欧美日韩| 女生裸体视频一区二区三区| 国产精品久久久久久久久| 免费电影一区二区三区| 午夜激情一区二区| 国产精品国产三级国产专区53 | 国产欧美精品久久久| 日韩激情欧美| 亚洲丝袜另类动漫二区| 国产资源在线视频| 国产99精品视频| 日韩视频在线免费播放| 另类中文字幕网| 黄色一级片网址| 久久99精品久久久| 97久久国产亚洲精品超碰热| 欧美黄页免费| 中文字幕亚洲欧美日韩2019| 成人全视频免费观看在线看| 亚洲日本中文字幕区| 超碰在线97免费| 中文字幕精品一区| 狠狠色一日本高清视频| 夜色激情一区二区| 在线中文字幕av| 色婷婷一区二区三区四区| 成人三级黄色免费网站| 国产在线精品国自产拍免费| 欧美a级黄色大片| 国产99精品国产| 三上悠亚av一区二区三区| 亚洲国产激情| 亚洲黄色一区二区三区| 欧美黄视频在线观看| 久久久久久国产精品美女| 国产免费永久在线观看| 欧美三级在线视频| 18+视频在线观看| 国产亚洲精品久久久久久| 九九99久久精品在免费线bt| 国产精品久久久久福利| 一本色道久久综合亚洲精品高清| 亚洲成人18| 久久久亚洲综合| 一区二区三区视频国产日韩 | 国产午夜在线观看| 日韩三级免费观看| 欧美xxxxx在线视频| 国产精品美女www爽爽爽| 日本高清视频网站www| 国产一区二区精品久久91| 国精产品一区一区三区视频| 亚洲人成在线播放网站岛国| 幼a在线观看| 久久精品久久久久久| 97人人精品| 三级网在线观看| 一区二区三区四区亚洲| 久久亚洲导航| 欧美一区三区三区高中清蜜桃| 9色国产精品| 精品欧美一区免费观看α√| 狠狠爱在线视频一区| 欧美与亚洲与日本直播| 国产精品日韩在线播放| 韩国午夜理伦三级不卡影院| 久久精品无码一区二区日韩av| 日韩三级视频在线看| 久久黄色影视| 中文字幕中文字幕99| 亚洲三级色网| 北条麻妃在线视频观看| 欧美日韩一区二区精品| 国产精品亚洲成在人线| 91亚洲精品久久久| 成人福利视频在线看| 在线观看黄av| 久久久亚洲国产天美传媒修理工| 日韩视频一区| 91av入口| 国产一区二区久久精品| 激情综合网址| 91午夜国产| 中文字幕 久热精品 视频在线| 久久99久久| 久久97久久97精品免视看| 夜夜嗨av一区二区三区网站四季av| 日本xxxxxxx免费视频| 日韩一区二区在线免费观看| 最新精品国偷自产在线| 日韩精品视频在线观看视频| 精东粉嫩av免费一区二区三区| 国产国产国产国产国产国产| 日韩av综合中文字幕| 91精品精品| 国产精品一区二区不卡视频| 26uuu成人网一区二区三区| 日韩网站在线免费观看| 色综合一个色综合亚洲| 另类ts人妖一区二区三区| 男人天堂手机在线视频| 精品日韩一区二区三区| 性欧美18xxxhd| 91精品黄色| 亚洲电影在线| 国产xxxxx| 欧美极品少妇xxxxx| 不卡视频一二三| 国产不卡123| 亚洲黄色成人久久久| 日韩一区二区三区四区| 欧美日韩国产综合网| 一级在线免费观看| 国产91九色视频| 中文字幕一区二区三区在线不卡 | 国产视频精品网| 一本色道久久综合亚洲精品不| av一级毛片| 欧美福利在线观看| 久久综合视频网| 黄色成人免费观看| 久久色在线播放| 国产91在线|亚洲| 亚洲精品一区| 久久视频免费在线| 2023国产精品| 国外成人福利视频| 4444在线观看| 日韩av中文字幕在线免费观看| 日韩电影在线观看网站| 曰本三级在线| 日韩中文字幕一区二区| 亚洲国产91精品在线观看| 日本精品在线一区| 乱子伦一区二区| 亚洲人成免费电影| hitomi一区二区三区精品| 国产一区高清| 日韩影视精品| 亚洲色无码播放| 久久男人中文字幕资源站| 成人自拍在线| 成视频在线免费观看| 日韩三级免费观看| 日韩av成人高清| 国产免费拔擦拔擦8x在线播放 | 日本不卡一区二区三区高清视频| 天堂av最新在线| 男人的天堂视频在线| 久久国产一区二区三区| 日本一区二区三区久久久久久久久不 | a毛片不卡免费看片| 插插插亚洲综合网| 国产午夜精品在线观看| 青青久久av| 福利在线视频网站| 成人在线播放av| 国产91精品一区二区麻豆网站| 久久三级毛片| 国产免费视频| 999热视频| 亚洲精品视频在线观看视频| 99re热视频精品| 成人羞羞动漫| 日韩中文字幕组| 国产精品欧美日韩久久| 欧美系列日韩一区|