JAVA设计模式工厂模式之简单工厂

上传人:dfg****19 文档编号:172522240 上传时间:2022-12-05 格式:DOC 页数:5 大小:70KB
收藏 版权申诉 举报 下载
JAVA设计模式工厂模式之简单工厂_第1页
第1页 / 共5页
JAVA设计模式工厂模式之简单工厂_第2页
第2页 / 共5页
JAVA设计模式工厂模式之简单工厂_第3页
第3页 / 共5页
资源描述:

《JAVA设计模式工厂模式之简单工厂》由会员分享,可在线阅读,更多相关《JAVA设计模式工厂模式之简单工厂(5页珍藏版)》请在装配图网上搜索。

1、您所在的位置:开发 Java 设计模式 JAVA设计模式:工厂模式之简单工厂(1) JAVA设计模式:工厂模式之简单工厂(1)2011-11-17 16:03 songry songry的博客 我要评论(0) 字号:T | T在java中,设计模式是多态和封装的重要表现形式,采用设计模式能够极大地提升可维护性和可扩展性,那么,同样工作在jvm上面的Clojure能否运用这些模式,或者说是否同样需要这些模式呢?AD: 序在java中,设计模式是多态和封装的重要表现形式,采用设计模式能够极大地提升可维护性和可扩展性,那么,同样工作在jvm上面的Clojure能否运用这些模式,或者说是否同样需要这些

2、模式呢?注:本文基于jdk1.6和Clojure1.2简单工厂先看看简单工厂的java代码:首先定义产品的接口:1. publicinterfaceIProduct 2. 3. /* 4. *使用产品 5. *parammsg 6. */7. publicvoiduse(Stringmsg); 8. 然后是实现了这个接口的两个具体产品Product1和Product2:1. publicclassProduct1implementsIProduct 2. 3. Override4. publicvoiduse(Stringmsg) 5. System.out.println(Product1u

3、se:+msg); 6. 7. 8. 9. 10. publicclassProduct2implementsIProduct 11. 12. Override13. publicvoiduse(Stringmsg) 14. System.out.println(Product2use:+msg); 15. 16. 17. 最后是根据类型获取产品的简单工厂:1. publicclassSimpleFactory 2. 3. /* 4. *根据产品类型生产产品 5. *paramproductType 6. *return 7. */8. publicstaticIProductfactory(

4、StringproductType) 9. if(productType.equals(1) 10. returnnewProduct1(); 11. elseif(productType.equals(2) 12. returnnewProduct2(); 13. returnnull; 14. 15. 这样,我们在java中就构建了能够生产出两个不同产品的简单工厂了。接下来,我们调用一下:1. /* 2. *简单工厂调用 3. *authorRoySong-2011-10-27 4. */5. publicclassSimpleFactoryTest 6. 7. /* 8. *parama

5、rgs 9. */10. publicstaticvoidmain(Stringargs) 11. IProductproduct1=SimpleFactory.factory(1); 12. product1.use(something); 13. 14. IProductproduct2=SimpleFactory.factory(2); 15. product2.use(something); 16. 17. 18. 运行这个调用程序,我们能够得到预期的结果:1. Product1use:something 2. Product2use:something那么,在Clojure中应该如何

6、实现呢?首先,让我们再回顾一下采用简单工厂的目的,这是为了将业务对象的产生和业务方法的执行进行解耦,使得业务方法执行时无须关注业务对象的类型。为了达到这个目的,我们提取了业务对象的接口IProduct(在实际的应用中也有可能是一个父类Product),它的里面包含了所有业务对象的共同操作use(在实际应用中可能不止这一种业务操作,当然也不叫use)的方法声明。然后,由SimplyFactory来创建IProduct的实例对象,然后调用use业务方法。在这个时候,调用方法是无须关注被调用的具体是哪个实例对象-Product1还是Product2。好吧,为了业务对象的产生和业务方法的执行解耦。然后

7、,Clojure中没有对象一说,方法倒是有,不过叫做函数。于是,问题解决了,没有对象,则无须对对象的产生进行解耦。本文结束。抛开上面的文字游戏不谈,实际上Clojure的解决方式更为灵活,这是由其语言特性所决定的。在java中,一切都是对象(除了原始类型),而类和接口是对象的定义,包含了有关对象动作方式的相关信息,比如名称、方法、属性和事件等。所以,在java应用中,能够使用的最小粒度的东西就是对象,如果需要调用某个实例方法,首先需要实例化某个对象,然后调用这个对象的方法;如果需要调用某个静态方法,需要找到静态方法所属的类,然后以类名.方法名的形式来调用。而在Clojure中,函数是第一类对象

8、,它无须依附对象或者类而存在(实际上,在几乎所有的函数式编程语言中都是这样)。换句话说,我们调用某个方法无须首先实例化某个对象或者找到某个类。那么,针对上面的例子,我们可以说,实际上我们需要的是根据不同的类型获取两个不同的业务处理方法而已。1. (defnsimply-factorytype 2. (cond 3. (=1type)(fnmsg(printlnProduct1use:msg) 4. (=2type)(fnmsg(printlnProduct2use:msg)在上面的代码中,我们定义了一个函数simply-factory,它接受一个参数type,然后根据type的值为1或者2返回

9、对应的函数。实际上,我们从内容上可以看出来,这两个函数就分别对应了之前我们定义的Product1和Product2中的use方法。接下来,我们就看看调用和产生的输出:1. user(simply-factory1)something) 2. Product1use:something 3. nil 4. user(simply-factory2)something) 5. Product2use:something 6. nil已经达到了我们之前想要的结果,对不对?让我们再看看调用方法的代码(simply-factory 1) something),(simply-factory 1)代表传入

10、参数1调用simply-factory函数,返回的是一个匿名函数;而(simply-factory 1) something)整体就代表将something传入simply-factory函数返回的匿名函数,然后我们就得到了预期的结果:Product1 use: something。我相信你已经看出来了,Clojure中函数的调用方式是:(函数名 参数)这个样子的。不过这个样子跟上面的java代码似乎差别有点大,让我们对这个调用方式做一点小小的修改:1. user(defproduct1(simply-factory1) 2. #user/product1 3. user(product1so

11、mething) 4. Product1use:something 5. nil 6. user(defproduct2(simply-factory2) 7. #user/product2 8. user(product2something) 9. Product2use:something 10. nil这样子应该就能够和之前的java代码一一对应了,其中1. IProductproduct1=SimpleFactory.factory(1);对应1. (defproduct1(simply-factory1),而1. product1.use(something);对应Clojure代码 1. (product1something)(product1 something)这样子是不是就能看得更明白一些了?不过要注意的是,虽然调用形式看起来很类似,但是在Clojure中product1是个函数,而java中product1是个对象。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!