factory 工厂设计模式
2013-03-22 17:41 功夫猫 阅读(284) 评论(0) 收藏 举报1.一个简单的工厂设计模式:数据库连接的转换;工具类:Proputil.java
package com.kebin.util; import java.io.IOException; import java.util.Properties; public class Proputil { public static Properties getProp(String fileName) { Properties prop = new Properties(); try { //拿工具类本身的字节码,与daoConfig.properties建立连通; prop.load(Proputil.class.getResourceAsStream(fileName)); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return prop; } }
2.封装类:facatory.java
package com.kebin.factory; import com.kebin.dao.UserDao; public class UserDaoFactory { public static UserDao getInstance(String className) { UserDao userDao = null; try { userDao = (UserDao)Class.forName(className).newInstance(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return userDao; } }
3.UserServiceImpl.java
1.调用封装的方法,加载filename得到prop。
Properties prop = Proputil.getProp("./daoConfig.properties");
2。从加载的prop内,调用getProperty()。得到className。key=value
String className = prop.getProperty("userDao");
3.调用工厂UserDaoFactory中方法。创建得到userDao。
userDao = UserDaoFactory.getInstance(className);
package com.kebin.service.impl; import java.util.Properties; import com.kebin.dao.UserDao; import com.kebin.factory.UserDaoFactory; import com.kebin.service.UserService; import com.kebin.util.Proputil; public class UserServiceImpl implements UserService { private static UserDao userDao = null; static { //调用封装的方法,加载filename得到prop。 Properties prop = Proputil.getProp("./daoConfig.properties"); //从加载的prop内,调用getProperty()。得到className。key=value String className = prop.getProperty("userDao"); //调用工厂UserDaoFactory中方法。创建得到userDao。 userDao = UserDaoFactory.getInstance(className); } private UserServiceImpl(){} private static UserServiceImpl userService = new UserServiceImpl(); public static UserServiceImpl getInstance() { return userService; } public void login(String name, String password) { userDao.login(name, password); } }
4.daoConfig.properties
userDao =com.kebin.dao.impl.UserDao4MySqlImpl
!userDao=com.kebin.dao.impl.UserDao4OracleImpl
5.其他的相关类
User
package com.kebin.pojo; public class User { private int id; private String name; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
UserDao
package com.kebin.dao; public interface UserDao { public void login(String name,String password); }
UserDao4MysqlImpl
package com.kebin.dao.impl; import com.kebin.dao.UserDao; public class UserDao4MySqlImpl implements UserDao { public void login(String name, String password) { System.out.println("-------------mysql---------------"); } }
UserDao4OracleImpl
package com.kebin.dao.impl; import com.kebin.dao.UserDao; public class UserDao4OracleImpl implements UserDao { public void login(String name, String password) { System.out.println("--------------Oracle---------------"); } }
UserService
package com.kebin.service; public interface UserService { public void login(String name,String password); }
然后写个测试类测试下就OK了。
test
import com.kebin.service.impl.UserServiceImpl; public class test { public static void main(String[] args) { UserServiceImpl.getInstance().login("", ""); } }

这里面写了监听。简单的配置下就好。

浙公网安备 33010602011771号