浏览 2109 次
锁定老帖子 主题:简单工厂的改进
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-01-17
1.具体类的接口 public interface I { public void m(); } 2.具体类 public class AI implements I { @Override public void m() { // TODO Auto-generated method stub System.out.println("AI"); } } public class BI implements I { @Override public void m() { // TODO Auto-generated method stub System.out.println("BI"); } } public class CI implements I { @Override public void m() { // TODO Auto-generated method stub System.out.println("CI"); } } 3.xml或者property配置文件 property文件 AI=cn.justin.l.AI BI=cn.justin.l.BI CI=cn.justin.l.CI xml文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>Single Factory</comment> <entry key="AI">cn.justin.l.AI</entry> <entry key="BI">cn.justin.l.BI</entry> <entry key="CI">cn.justin.l.CI</entry> </properties> 4.处理配置文件的类 public class PU { private Properties p = new Properties(); public PU() { try { //p.load(new FileInputStream("./src/factory.property")); p.load(PU.class.getResourceAsStream("factory.property")); //p.loadFromXML(PU.class.getResourceAsStream("factory.xml")); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public String get(String key) { return p.getProperty(key); } } 5.工厂类 public class SFactory { private PU pu =null; public SFactory(PU pu) { super(); this.pu = pu; } public I make(String key) { try { return (I) Class.forName(pu.get(key)).newInstance(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } } } 6.测试类 public class T { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub PU puu=new PU(); SFactory f=new SFactory(puu); I i=f.make("AI"); i.m(); i=f.make("BI"); i.m(); } } 这样的简单工厂也可以很方便的扩展。 只要在配置文件里面配就可以了。 附件为工程 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-01-17
已经有无数个这样的实现了.
|
|
返回顶楼 | |
发表时间:2008-01-23
jomper 写道 已经有无数个这样的实现了. 就是类的加载,地球人都知道了 |
|
返回顶楼 | |