資源描述:
《JAVA設計模式工廠模式之簡單工廠-1》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。
1、序在java中,設計模式是多態(tài)和封裝的重要表現(xiàn)形式,采用設計模式能夠極大地提升可維護性和可擴展性,那么,同樣工作在jvm上面的Clojure能否運用這些模式,或者說是否同樣需要這些模式呢?注:本文基于jdk1.6和Clojure1.2簡單工廠先看看簡單工廠的java代碼:首先定義產品的接口:1.public?interface?IProduct?{?2.?3.????/**?4.?????*?使用產品?5.?????*?@param?msg?6.?????*/?7.????public?void?use(String?msg);?8.}?然后是實現(xiàn)了這個接口的兩個具體產品P
2、roduct1和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)?
3、{?14.????????System.out.println("Product2?use:"+msg);?15.????}?16.?17.}?最后是根據類型獲取產品的簡單工廠:1.public?class?SimpleFactory?{?2.?3.????/**?4.?????*?根據產品類型生產產品?5.?????*?@param?productType?6.?????*?@return?7.?????*/?8.????public?static?IProduct?factory(String?productType){?9.????????if(productType
4、.equals("1"))?10.????????????return?new?Product1();?11.????????else?if(productType.equals("2"))?12.????????????return?new?Product2();?13.????????return?null;?14.????}?15.}?這樣,我們在java中就構建了能夠生產出兩個不同產品的簡單工廠了。接下來,我們調用一下:1./**?2.?*?簡單工廠調用?3.?*?@author?RoySong?-?2011-10-27?4.?*/?5.public?class?S
5、impleFactoryTest?{?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.????????
6、product2.use("something");?16.????}?17.?18.}?運行這個調用程序,我們能夠得到預期的結果:1.Product1?use:something?2.Product2?use:something?那么,在Clojure中應該如何實現(xiàn)呢?首先,讓我們再回顧一下采用簡單工廠的目的,這是為了將業(yè)務對象的產生和業(yè)務方法的執(zhí)行進行解耦,使得業(yè)務方法執(zhí)行時無須關注業(yè)務對象的類型。為了達到這個目的,我們提取了業(yè)務對象的接口IProduct(在實際的應用中也有可能是一個父類Product),它的里面包含了所有業(yè)務對象的共同操作use(在實際應用中可能不止
7、這一種業(yè)務操作,當然也不叫use)的方法聲明。然后,由SimplyFactory來創(chuàng)建IProduct的實例對象,然后調用use業(yè)務方法。在這個時候,調用方法是無須關注被調用的具體是哪個實例對象--Product1還是Product2。好吧,為了業(yè)務對象的產生和業(yè)務方法的執(zhí)行解耦。然后,Clojure中沒有對象一說,方法倒是有,不過叫做函數。于是,問題解決了,沒有對象,則無須對對象的產生進行解耦。本文結束。拋開上面的文字游戲不談,實際上Clojure的解決方式更為靈活,這是由其語言特性所決定的。在java中,一切都