你了解对象工厂的设计吗?带你一步一步的由浅入深的理解对象工厂

        说下前言:在struts框架中的struts2-core包下有个struts-default.xml。打开后发现里面有封装的很多的对象,其中有个对象工厂去管理如下图所示:


      我们由上图的对象工厂来深入理解下什么是对象工厂,它具体在底层是怎么实现的呢

      假设现在有个员工的需求。我们在service中去创建dao一般情况下是这样

      

    这样创建一般都会显得很low,我们知道与持久层打交道有jdbc,mybatis,hibernate但是我们换一种方式就需要修改daoimpl类这样会显得很麻烦。并出现硬编码问题。假设我们现在定义一个DaoFactory类(使用单例模式去创建)专门去创建dao  如下:

                    

    这 样看起来还是显得很low只是把new对象放在工厂中,用户看不到而已。接下来我们使用反射以及配置文件去实现这个类代码如下:

 

      现在虽然比着上面的高级一点,但是代码还是有点问题。用户在创建的时候还是需要强转的。这样显得并不完美,我们应该把用户需要强转的这一环节去交给工厂去完成,而用户只需要去调用即可,不要忘了最初的规范。进而我们进入了泛型:代码如下:

      上述代码虽然解决了强转问题,但是又引入了新的问题,假设现在用户随便使用类型进行接收(int类型),那么代码就会报错。因为我们传的是Employee类型的对象,不能使用int去接收。进而我们在思考,通过参数去加控制对象进而更加的安全,不会出现这个问题,代码如下:

看上述代码,虽然解决了用户接收错误的问题但是新的问题又出现了,如果使用前后都是int类型呢?要解决这个问题,我们应该在getDao方法中进行判断代码如下:


      上述问题解决了,但是新的问题又出现了。现在bean.properties中只是单一的键值对,是单例模式,若是多例呢?这时候我们应该想到xml文件。

总结:这就是框架底层的工厂对象模式。进而去引出spring这个完美的框架体系。还是那句话,代码不是主要的。重要的是思想,是这个模式带给我们的思考方式,一步一步去完善我们需要的,这才是我们所追求的最高境界。永远的站在比代码更高的层次去想问题,会走的更远!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值