工厂模式 ----- 简单工厂模式实例

通过一个小的场景,来理解一下工厂模式的使用情况。

数据库有很多种,常用的有mysql和oracle,我们的代码如果想要与数据库通讯,就必须使用对应的数据库驱动包。现在有这样一个场景,假设我的程序连接了两个数据库,我要根据用户的请求来查询不同的数据库,怎么办。

拿到这个需求 。

首先我们来看一下普通玩家的玩法:

普通玩家

要满足要求很简单啊,写两个类,一个连接mysql,一个连接oracle不就完了。然后在调用的时候根据参数选择需要连接哪个数据库就完了,打完收工~ 看起来没什么毛病啊~确实没什么毛病

好了,你真按这个思路写的话,打完肯定就下岗了。其实写代码最大的问题不在于写完的时候你觉得你多么厉害,多么有效率,而是一旦要修改的时候,才能发现你到底厉不厉害。

假设我要新加一个数据库postgresql,我首先要在被调用方新增一个类,实现连接数据库的方法,然后在调用方还要改代码!main方法就是调用方,需要再加一个else if 的判断,判断是否postgresql。

我们写代码的原则是修改要对调用者透明,就是说你改了代码,不要让调用你功能的地方都一起改,如果你一改代码,大家伙都要加班陪你改,你想想你的下场是什么。

我们再来看看高端玩家怎么做:

高端玩家

看看高端玩家的做法,首先定义一个连接的接口,然后具体的mysql连接类和oracle连接类实现接口。

DataBaseFactory这个类是关键,他将对象的调用和创建分离开来,自己专门的职责就是创建对象,而调用者只管调用。当调用者需要mysql的时候,创建mysql的连接类返回,需要oracle的时候,创建oracle的连接类返回。

在工厂类中,获取连接对象方法的返回值就是定义接口的原因,这样不管具体需要返回什么类型的数据库,只要是个数据库的连接就可以。

再看main方法调用的时候,不管是mysql还是oracle,都直接用接口对象调用方法,不用具体的类去创建对象,这样使程序的灵活性大大增加。

灵活性体现在,一旦需要增加新的数据连接,main方法里一行代码都不需要改变,只需要将参数修改成postgresql就完了。具体需要修改的只是功能的提供方,也就是新增一个postgresql去实现connection接口,然后在DataBaseFactory里面加一个判断即可。

有同学肯定很困扰,你这样搞一大堆,该改的时候还不是要改,有什么区别?

区别就在于,普通玩家需要调用方一起改,要知道一个系统大了,可是不止一个地方有调用的,而高端玩家只需要自己改,调用方不用改,这就是区别。

其实这就是简单工厂模式,工厂就是用来批量创建对象的,不需要调用者自己创建,而是提供者根据调用者的需求来创建,这样设计的好处是,就算我要改功能,对于调用方来说,他是可以完全不关心甚至不用知道。
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值