JAVA工厂模式举例
来源:互联网 发布:jumpsoles 淘宝 编辑:程序博客网 时间:2024/06/06 05:09
本文所使用的工具是MyEclipse。
1,创建配置文件
首先,新建工程Cust,在scr下,创建一个配置文件 config.properties , 里面内容为
dao=cn.itheima.dao.CustDaoImpl
service=cn.itheima.service.CustServiceImpl
保存。
2,创建两个接口和类。
CustDao接口
package cn.itheima.dao;public interface CustDao {/* * 增加用户的方法 * */public int addUser();}
CustService接口
package cn.itheima.service;import cn.itheima.bean.Cust;public interface CustService {/* * 增加用户的方法 * 参数是一个javaBean * */public void addUser(Cust cust);}
CustDaoImpl类
package cn.itheima.dao;public class CustDaoImpl implements CustDao{public int addUser() {// TODO Auto-generated method stubreturn 0;}}
CustServiceImpl类
package cn.itheima.service;import cn.itheima.bean.Cust;import cn.itheima.dao.CustDao;import cn.itheima.factory.PubFactory;public class CustServiceImpl implements Custservice {CustDao dao=PubFactory.getFactory().createInstance("dao", CustDao.class);public void addUser(Cust cust) {// TODO Auto-generated method stub}}
3,创建工厂
package cn.itheima.factory; import java.io.File; import java.io.FileInputStream; import java.util.Properties; public class PubFactory { //私有化实例工厂对象,使外界不能直接调用 private static PubFactory factory=new PubFactory(); //声明一个Properties类对象 private static Properties prop; //构造方法私有化,使外界不能直接创建工厂 private PubFactory(){} //静态代码块,类加载就执行,读取配置文件 static { try{ //类加载器方式获得配置文件绝对路径 String path=PubFactory.class.getClassLoader().getResource("config.properties").getPath(); File file=new File(path); prop=new Properties(); //创建Properties对象 prop.load(new FileInputStream(file));//加载配置文件 }catch (Exception e) { e.printStackTrace(); } } public static PubFactory getFactory(){ return factory; } public <E> E createInstance(String name,Class<E> c){ try{ /*Class<E> x = (Class<E>) Class.forName(prop.getProperty(name)); return x.newInstance();*/ /*prop.getProperty(name)获取配置文件中name对应的字符串 * 比如传入的是dao,那就读取到cn.itheima.dao.CustDaoImpl * 根据这个类名,就能创建这个类对应的字节码文件,也就是一个类。 * * 利用泛型技术,第二个参数是一个<E>类型的字节码,作用是限定返回值得对象的类型 * */ Class clazz=Class.forName(prop.getProperty(name)); //根据clazz类,创建对象 return (E)clazz.newInstance(); }catch (Exception e) { e.printStackTrace(); throw new RuntimeException(); } } }
4,使用工厂
Custservice service=PubFactory.getFactory().createInstance("service", Custservice.class);
//创建实现了Custservice 接口的CustServiceImpl类的一个对象
这样极大的降低了软件各层之间的耦合性。比如我在service层,需要调用dao层的对象,如果不用工厂,直接写死在service层里,那么将来做维护或者二次开发的时候,如果想换掉dao层该对象,那么就需要在service层里进行修改,很麻烦。而用了工厂模式,只需要创建好新的dao层的类,实现dao层接口,然后在配置文件里把dao行更改就行了。
//创建实现了Custservice 接口的CustServiceImpl类的一个对象
这样极大的降低了软件各层之间的耦合性。比如我在service层,需要调用dao层的对象,如果不用工厂,直接写死在service层里,那么将来做维护或者二次开发的时候,如果想换掉dao层该对象,那么就需要在service层里进行修改,很麻烦。而用了工厂模式,只需要创建好新的dao层的类,实现dao层接口,然后在配置文件里把dao行更改就行了。
- JAVA工厂模式举例
- Java设计模式:工厂模式举例
- 抽象工厂模式举例
- java中的单例模式和工厂模式举例:
- C++抽象工厂模式举例
- 抽象工厂模式 实物举例
- java工厂方法和抽象工厂举例
- java观察者模式举例
- java future模式举例
- java 单例模式举例
- Java生产者消费者模式举例
- java工厂模式-简单工厂,工厂方法,抽象工厂模式
- Java工厂模式之简单工厂模式
- java中的工厂模式(简单工厂模式+工厂方法模式)
- 工厂模式(工厂方法模式,抽象工厂模式) Java
- java设计模式之代理模式举例
- java的工厂模式
- java工厂模式
- Android_AsyncTask详解及其应用(三)_图片错位以及AsyncTask重复创建的问题
- Android开发:系统自动实现开机启动
- 黑马程序员之装箱与拆箱(享元设计模式的应用)
- 游戏服务器的总体框架
- 逆向随机生成100个数
- JAVA工厂模式举例
- 消息中间件的比较-转载
- Android_AsyncTask详解及其应用(二 )_RejectedExecutionException问题
- Android UI设计
- 计算无符号整型变量的二进制中的1的个数
- 逆向判断素数
- Android NDK 编译过程中遇到错误 exception handling disabled, use
- hdoj_2047 阿牛的EOF牛肉串
- 【备忘】Android模拟小球自由落体(SurfaceView)