美文网首页
策略模式

策略模式

作者: 小蜗牛Snail丶 | 来源:发表于2018-04-12 19:22 被阅读0次

由于策略模式和工厂模式很像

主要区别 我的理解:

工厂模式就是需要什么生产什么

策略模式就是根据已有的策略选择用什么

他俩有什么本质区别么?

于是自己也好好的缕了一下,

下面就说说我的看法。

简单工厂模式:

拥有这样几个部分 -  

Client(客户端即功能使用者)、Factory(工厂)、BaseFunction(具体业务基类)、ConcreteFunction(具体业务的具体逻辑实现)。Client 在调用时候通过传入特定条件由 Factory 实例化出特定的 ConcreteFunction 使用。即: BaseFunction bf = Factory.CreateFunction(XXXType);bf.Run();

策略模式拥有这样几个部分 -

Client(客户端即功能使用者)、Context(对具体业务执行的维护)、Strategy(具体业务的基类)、ConcreteStrategy(具体业务的具体逻辑的实现)。Client 在调用时候通过自己判断特定条件,由 Context 去调用 ConcreteStrategy 使用。即:Context context;Switch(XXXType){        case AType:                context = new Context(new AStrategy);        break;      case BType:              context = new Context(new BStrategy);      break;}context.Run();

到这里我们就能看到区别了。Client 在调用时候通过传入特定条件由 Factory 实例化出特定的 ConcreteFunction 使用。Client 在调用时候通过自己判断特定条件,由 Context 去调用 ConcreteStrategy 使用。    

对比一下这两个步骤,简单工厂模式将功能选择放在 Factory 中实现了,减少了 Client 中的逻辑量,更加符合面向对象程序设计的封装特性。    策略模式中功能选择的逻辑放在了 Client 中,而这部分逻辑其实是完全可以抽离出去想工厂一样封装起来,但是策略模式中严格来讲只包含了对 Context 引用相对于简单工厂模式耦合性更低了。在这里也就不难看出二者的区别了。随后便是提出将策略模式 与 简单工厂模式进行结合。即: 将功能选择放在 Context 中,Context 便担当了 Factory 和他原本 Context 的角色。而 Client 的调用也仅仅关心 Context 就可以了。不仅一定程度降低了耦合性,也提高了可维护性。    其实这是两个非常简单的设计模式,而使用场景也应该根据需求自行选择。一句话非常有道理,没有最正确的设计,只有最合适的设计。如果非要为了设计而设计,也是不恰当的做法。

相关文章

网友评论

      本文标题:策略模式

      本文链接:https://www.haomeiwen.com/subject/jozphftx.html