![](https://img.haomeiwen.com/i5554576/bc74a5e84a5c4f31.png)
由于策略模式和工厂模式很像
主要区别 我的理解:
工厂模式就是需要什么生产什么
策略模式就是根据已有的策略选择用什么
他俩有什么本质区别么?
于是自己也好好的缕了一下,
下面就说说我的看法。
简单工厂模式:
拥有这样几个部分 -
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 就可以了。不仅一定程度降低了耦合性,也提高了可维护性。 其实这是两个非常简单的设计模式,而使用场景也应该根据需求自行选择。一句话非常有道理,没有最正确的设计,只有最合适的设计。如果非要为了设计而设计,也是不恰当的做法。
网友评论