欢迎来到天天文库
浏览记录
ID:39550237
大小:18.94 KB
页数:4页
时间:2019-07-06
《JAVA设计模式工厂模式之简单工厂-1》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、序在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); 8.} 然后是实现了这个接口的两个具体产品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中应该如何实现呢?首先,让我们再回顾一下采用简单工厂的目的,这是为了将业务对象的产生和业务方法的执行进行解耦,使得业务方法执行时无须关注业务对象的类型。为了达到这个目的,我们提取了业务对象的接口IProduct(在实际的应用中也有可能是一个父类Product),它的里面包含了所有业务对象的共同操作use(在实际应用中可能不止
7、这一种业务操作,当然也不叫use)的方法声明。然后,由SimplyFactory来创建IProduct的实例对象,然后调用use业务方法。在这个时候,调用方法是无须关注被调用的具体是哪个实例对象--Product1还是Product2。好吧,为了业务对象的产生和业务方法的执行解耦。然后,Clojure中没有对象一说,方法倒是有,不过叫做函数。于是,问题解决了,没有对象,则无须对对象的产生进行解耦。本文结束。抛开上面的文字游戏不谈,实际上Clojure的解决方式更为灵活,这是由其语言特性所决定的。在java中,一切都
此文档下载收益归作者所有