策略模式

在编写代码中,会用到各种算法和策略,我们可以根据环境的不同来选择不同的算发或者策略来完成该功能。一些简单的算法:如查找或者排序,我们可以将方法写在一个算法类中,在我们想要使用的时候就调用这个类中的某一个方法就可以了。这种代码方法我们称之为硬编码,如果将来需要在app或者客户端上增加或者修改一种算法,我们就需要去修改客户端代码,而且会导致客户端的代码变得臃肿不利于维护。

解决方法:义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。策略模式使得算法可独立于使用它的客户而变化。


策略模式结构图


Strategy

 Strategy(策略类):定义所有支持的算法的公共接口。 Context使用这个接口来调用某ConcreteStrategy定义的算法。


ConcreteStrategy

 ConcreteStrategy(具体实现类):封装了具体的算法或者行为,继承于Strategy。


Context

Context:用一个ConcreteStrategy对象来配置。维护一个对Strategy对象的引用。可定义一个接口来让Strategy访问它的数据。


客户端代码

在客户端调用的时候,首先创建一个context上下文对象,然后传入我们想要的算法的对象,这个算法的对象我们已经在客户端通过策略模式实现过了,这个时候我们只需要调用就 可以了。我们在context中的实现方法是ContextInterface(),这个方法正好调用了Strategy接口的方法,而我们实现策略的ConcreteStrategy实现类也因为重写了Strategy类的方法,实现了我们想要的算法,才构成了我们的策略模式



工厂模式和策略模式的区别:工厂模式是创建型模式 ,它关注对象创建,提供创建对象的接口. 让对象的创建与具体的使用客户无关。

策略模式是对象行为型模式 ,它关注行为和算法的封装 。它定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。使得算法可独立于使用它的客户而变化。

感觉工厂模式更灵活包含的使用方式更多,而策略模式仅仅只是一种相对固定的工具。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 场景问题# 1.1 报价管理## 向客户报价,对于销售部门的人来讲,这是一个非常重大、非常复杂的问题,对不同的...
    七寸知架构阅读 10,542评论 9 62
  • 1 场景问题 1.1 报价管理 向客户报价,对于销售部门的人来讲,这是一个非常重大、非常复杂的问题,对不同的客户要...
    4e70992f13e7阅读 8,286评论 2 16
  • 本文仅仅为入门,高手勿喷。 实际工作中,我们总会遇到类似如下的需求:某支付系统接入以下几种商户进行充值:易宝网易,...
    JarvanMo阅读 14,809评论 14 26
  • 1.概述 demo地址,欢迎star 例子1: 商场产品销售:可以正常价格售出,可以打折形式售出,也可以通过积分的...
    barry阅读 4,158评论 0 1
  • 1.问题例1:一个菜单功能能够根据用户的“皮肤”首选项来决定是否采用水平的还是垂直的排列形式。同事可以灵活增加菜单...
    小飞猪阅读 2,915评论 0 0