为什么用工厂模式,工厂模式有什么作用

为什么用工厂模式,工厂模式有什么作用

  • 降低模块间的耦合度 (这也是最关键的一点)

举个例子:

现在有两个模块A和B,同时模块A中又有很多子模块继承于模块A,叫做module_A1,module_A2,module_A3,module_A4,module_A5....module_An,这些子模块都有一个共同的接口interface,此时模块B要调用模块A子模块的方法,正常是不是要写成 module_A1->interface()或者 module_An->interface(),这时候模块B中充满了模块A子模块的实例,两个模块高度耦合,而且使用接口的地方代码重复率很高。

这时就有了第一次改进的方法,用类的多态,mode *A = new module_A1(); A->interface();虽然这种情况解决了模块B中多个模块A子模块的问题,只要一个模块A实例,降低了耦合度,但是还是有一个问题,那就是模块B每次调用都还要知道,具体实例化哪个A的子模块,同时模块A添加修改了子模块,模块B也要修改,但是模块B并不想操心那么多,于是模块B说:“我只想无脑用这个接口罢了”,此时模块A说:“没问题,这个交给我来解决,以后你只要调用下面这个接口,其它交给我来办”,这是模块B开心的笑了,嗯嗯,这样多简单啊。  

 Factory* factory = new Factory();

 factory->Create(xxx)->interface();

此时模块A和模块B之间的耦合度基本很小了,上面的factory,就是我们常说的工厂模式了,工厂会根据参数自动创建对应的模块A子模块实例,它主要是用来减少两个模块间的耦合度的,调用者不需要管你是怎么创建的对象,调用者只负责拿来用就行。

  • 其它的作用,减少代码的维护难度,增加代码的可阅读性。

  举个例子:

  1. 减少代码重复度,比如要new一个实例,但是new的前提是需要获取各种参数,比如new一个数据库链接对象,需要密码,用户名,ip,port,table等等,还要进行参数验证,那我们可以把这些逻辑放到一个接口里面,每次要new对象就调用这个接口,而这个接口就是我们说的工厂。

  2. 方便代码修改,比如我们很多地方都用到了new对象,突然有一天莫名觉得,咦我之前怎么取这个类名的啊,真难听,那么你就要把代码中所有new的地方都改了,但是人又不是机器,不能百分百保证能全修改掉了,但如果把类的创建放到工厂当中就好办多了,只要修改一个地方。

    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值