策略模式的依赖倒置和控制反转具体应用

来源:7-3 [php]策略模式的控制反转

追逐梦想30

2016-08-10 15:52

举几个例子说明下依赖倒置和控制反转的使用!

写回答 关注

4回答

  • zZ爱吃菜
    2016-08-11 15:46:21
    已采纳

    首先我觉得你要清晰几个概念:

    紧耦合:

    首先在 page 类中与 UserStrategy 的实例,以及策略的具体实现来达到策略的具体实现,这样是不是 page 与 UserStrategy 紧密相关,也就是说 如果 UserStrategy 的实现修改了,例如:去掉了 showAd() 方法。page 自然需要做相应修改,这就叫做 紧耦合(依赖性太强)。

    依赖倒置和控制翻转:

    page 类里不需要 UserStrategy 的具体实现,只需要知道 page 场景下需要 UserStrategy 的策略,具体策略下实现那些方法,不需要知道。这样 page 与 UserStrategy 是离散的、低耦合的。这样代码的就更加稳定,可维护,以拓展。

    明白了这几个概念,我想你应该知道为什么我们需要依赖倒置和控制翻转了。

    设计模式不要为了用而用,而是应该明白为什么要用才去用

    奋斗de小蜗...

    我咋感觉你说得不对呢,你用一个类的方法,然后后续把这个方法删了,那肯定需要修改啊,任何方法也做不到你把一个类的方法删了,然后不修改调用它的地方,绝对不可能,你看能说把showAd和showcate包在一个方法里,这样就可以了,那我要是再把这个方法删除了呢?不还是得修改?

    2020-04-02 18:40:57

    共 2 条回复 >

  • qq_慕斯卡6187973
    2019-12-25 22:15:18

    难道意思是实现解耦,需要新增Strategy的index方法,然后把showAd,showCategory包进去。然后在page类的index方法中只有$$this->strategy->index(),这样就实现了无关性

  • qq_慕斯卡6187973
    2019-12-25 22:12:19

    不明白说的是什么,紧耦合不好,需要解耦。但实际上,page类的index方法,是依赖于Strategy的showAd,showCategory()方法,如果一个方法要删除掉,比如删除showAd,那还是要改page类的index方法。

    坐不住的雨伞

    我觉得也是啊,如果userStrategy中删除了一个方法,Page中的index需要修改,和最佳回答提到的紧耦合一样啊

    2019-12-28 20:31:58

    共 1 条回复 >

  • 追逐梦想30
    2016-08-11 16:45:15

    好的,非常感谢!

大话PHP设计模式

帮助PHPer具备使用设计模式解决工程中复杂逻辑的能力

62160 学习 · 230 问题

查看课程

相似问题