网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > JAVA > 新手入门 > 开发工具 > Eclipse Template与模式  

Eclipse Template与模式

2007-05-10  作者:bitsCN整理  来源:收集整理  点评 投稿 收藏

 
        该模式的示例代码如下:
public class Factory {
public static Animal getInstance(String name)
{
try
{
Class cls = Class.forName(name);
return (Animal)cls.newInstance();
}
catch(Exception e)
{
e.printStackTrace();
return null;
}
}
}
      对于这段代码,我们可以设计一个名为:DynaFactory的Template,其Pattern为:
    publicstatic ${interface} getInstance(String name)
    {
       try
       {
           Class cls = Class.forName(name);
           return (${interface})cls.newInstance();
       }
       catch(Exception e)
       {
           e.printStackTrace();
           returnnull;
       }
    }
        这个Template中的参数${interface}代表的是该工厂类生产的产品的接口,可以是你的实际项目中的任何接口,你只需要在代码中用实际的接口代替${interface}即可,如下:
 
      图中正在将interface参数修改为Animal。
 
      还有一个经典例子是多态工厂模式,关于该模式的阐述,我在我的Blog:幕后英雄的用武之地——浅谈Java内部类的四个应用场景中的第四个例子中讲到。
      要使用该模式,有多达两处的代码重复,请看下面的示例:
abstract class ShapeFactory { 

网管网www_bitscn_com

 protected abstract Shape create(); 网管bitscn_com 
 private static Map factories = new HashMap(); 网管u家bitscn.net 
 public static void  网管有家www.bitscn.net 
  addFactory(String id, ShapeFactory f) { 
网管u家www.bitscn.net
    factories.put(id, f); 网管bitscn_com 
 } 网管u家bitscn.net 
 // A Template Method: 网管u家u.bitsCN.com 
 public static final  网管有家www.bitscn.net 
  Shape createShape(String id) { 中国网管联盟bitsCN.com 
    if(!factories.containsKey(id)) { 

网管网www.bitscn.com

      try { 
网管有家bitscn.net
        // Load dynamically 网管u家u.bitsCN.com 
        Class.forName("c05.shapefact2." + id); 网管u家u.bitsCN.com 
      } catch(ClassNotFoundException e) { 网管u家bitscn.net 
        throw new RuntimeException( 

网管u家bitscn.net

          "Bad shape creation: " + id); 网管有家www.bitscn.net 
      } 网管论坛bbs_bitsCN_com 
      // See if it was put in: 
网管u家u.bitscn@com
      if(!factories.containsKey(id)) 
网管联盟bitsCN_com
        throw new RuntimeException( 
网管u家u.bitsCN.com
          "Bad shape creation: " + id); 中国网管联盟bitsCN.com 
    } 网管u家u.bitsCN.com 
    return  网管bitscn_com 
      ((ShapeFactory)factories.get(id)).create(); 
网管u家bitscn.net
 } 中国网管论坛bbs.bitsCN.com 
}
该代码有相当大的重复性,除了类名:ShapeFactory在每一个应用中不一样,还有接口:Shape不一样,还有就是包:c05.shapefact2 不一样。
下面是另外的一段代码:
class Circle implements Shape { 网管u家www.bitscn.net 
 private Circle() {} 
网管下载dl.bitscn.com
 public void draw() {  

中国网管论坛bbs.bitsCN.com

    System.out.println("Circle.draw");  

网管联盟bitsCN_com

  } 
网管u家u.bitscn@com
 public void erase() {  

网管朋友网www_bitscn_net

    System.out.println("Circle.erase"); 网管u家u.bitscn@com 
 } 
网管u家u.bitscn@com
 private static class Factory  网管朋友网www_bitscn_net 
  extends ShapeFactory { 

网管u家www.bitscn.net

    protected Shape create() {  
网管朋友网www_bitscn_net
      return new Circle();  网管u家u.bitscn@com 
    } 网管朋友网www_bitscn_net 
 } 网管u家www.bitscn.net 
 static { 网管网www.bitscn.com 
    ShapeFactory.addFactory( 网管u家bitscn.net 
      "Circle", new Factory()); 

网管u家bitscn.net

 } 网管联盟bitsCN@com 
} 网管u家u.bitscn@com 
在这段代码里,内部类:Factory也是重复的。

网管网www_bitscn_com

TAGs   模式       Template   代码   我们   enclosing_type   一个      
 上一篇:Hibernate项目中工具箱指南   下一篇:java 中使用websphere MQ
Eclipse Template与模式 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: