设为首页 收藏本站
查看: 1267|回复: 0

[经验分享] Mybatis学习1----基于OCP的最简便dao工厂

[复制链接]

尚未签到

发表于 2015-11-9 10:04:34 | 显示全部楼层 |阅读模式
  很烂的水平,开始写博客,玩玩~~
  现在看的是“传智”视频的Mybatis部分,里面有个关于OCP的工厂设计。里面讲的dao工厂,用到了“反射机制”,所以觉得很有必要学学。
  OCP(Open-Closed principle),一个好的设计应该能够容纳新的功能需求的增加,但是增加的方式不是通过修改又有的模块(类),而是通过增加新的模块(类)来完成的,也就是在设计的时候,所有软件组成实体包括接口,函数,函数等必须是可扩展但不可修改的。

一个好的设计应该能够容纳新的功能需求的增加,
但是增加的
方式不是通过修改又有的模块(类)
,而是通过增加新的模块(类)来完成的,
也就是在设计的时候,
所有软件组成实体包括接口,
函数,
函数等必须是可扩展
但不可修改的。
  简单的说就是对增加开放,对修改关闭。因此我们设计时要基于“面向接口”编程。
  1. dao.properties
内容为factory
Dao的地址

  2. PropertiesUtil 解析工具类

  

  • public class PropertiesUtil {
  • private static Properties props = null;
  • private static InputStream ins = null;//输入流
  • static {
  • ins = PropertiesUtil.class.getClassLoader().getResourceAsStream(
  • "dao.properties");
  • }

  • public static Properties getDaoProp() {
  • try {
  • if (props == null) {
  • props = new Properties();
  • }
  • props.load(ins);//加载
  • } catch (IOException e) {
  • e.printStackTrace();
  • }
  • return props;
  • }

  • }

3.写一个接口IFactoryDao,根据不同的名称获得不同的Dao
  

  • public interface IFactoryDao {
  • //根据传入的name读取 dao.properties对应的key,找到对应的value,获得相应的dao类实例
  • public Object getDao(String name);
  • }
  
  4.PropertiesDao实现IFactoryDao接口
  public class PropertiesFactory implements IFactoryDao {




  • private static IFactoryDao f = new PropertiesFactory();

  • private Map<String,Object> daos = new HashMap<String,Object>();

  • //单例模式
  • public static IFactoryDao getInstance() {
  • return f;
  • }
  • //实现getDao方法
  • public Object getDao(String name) {
  • if(daos.containsKey(name)){
  • return daos.get(name);
  • }
  • try {
  • // 1.读取properties
  • Properties props = PropertiesUtil.getDaoProp();
  • // 2.根据name获得key
  • String daoName = props.getProperty(name);
  • // 3.创建dao实例---用到反射机制
  • Object daoObj = Class.forName(daoName).newInstance();
  • daos.put(name, daoObj);
  • return daoObj;
  • } catch (InstantiationException e) {
  • e.printStackTrace();
  • } catch (IllegalAccessException e) {
  • e.printStackTrace();
  • } catch (ClassNotFoundException e) {
  • e.printStackTrace();
  • }
  • return null;
  • }


  • }
  
  5.daoUtil 工具类 实现创建工厂方法
  

  • public class DaoUtil {
  • public static IFactoryDao createDaoFactory() {
  • IFactoryDao f = null;
  • try {
  • // 1.读取.properties
  • Properties prop = PropertiesUtil.getDaoProp();
  • // 2.&quot;facotry&quot; 对应的value
  • String fs = prop.getProperty(&quot;factory&quot;);
  • // 3.获得这个类 ---.Class和 Class.forName(&quot;&quot;)
  • Class clz = Class.forName(fs);
  • //4.获得clz的getInstance方法
  • Method m = clz.getMethod(&quot;getInstance&quot;);
  • f = (IFactoryDao)m.invoke(clz);
  • } catch (ClassNotFoundException e) {
  • e.printStackTrace();
  • } catch (SecurityException e) {
  • e.printStackTrace();
  • } catch (NoSuchMethodException e) {
  • e.printStackTrace();
  • } catch (IllegalArgumentException e) {
  • e.printStackTrace();
  • } catch (IllegalAccessException e) {
  • e.printStackTrace();
  • } catch (InvocationTargetException e) {
  • // TODO Auto-generated catch block
  • e.printStackTrace();
  • }
  • return f;
  • }
  • }

  
  

  

  
  

  
         版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-136907-1-1.html 上篇帖子: OCP认证考试指南(12):配置Oracle互联 下篇帖子: OCP认证流程详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表