Java设计模式——策略模式

策略模式

定义

定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法可以独立于使用它的客户而变化。

结构

Context(环境类):环境类是使用算法的角色,它在使用解决的某个问题(即实现某个功能)时可以采用多种策略。

Strategy(抽象策略类):抽象策略类为所支持的算法声明了抽象方法,是所有策略类的父类。

ConcreteStrategy(具体策略类):具体策略类实现了在抽象策略类中声明的算法,在运行时具体策略类将覆盖在环境类中定义的抽象策略类对象。

类图

策略模式类图

实现过程

先创建一个抽象类(抽象策略类),定义一些方法,然后创建一些类(具体策略类)去继承,并具体实现它的业务方法。然后再创建一个类(环境类)去调用抽象类,这里是直接把他当做成员变量传入环境类,它们之间的关系是聚合。

优点

  1. 策略模式提供了对开闭原则的完美支持。
  2. 策略模式提供管理相关算法中的办法。策略类的等级结构定义的一个算法或行为族,恰当地使用基层可以把公共代码转移到抽象策略类中,从而避免重复的代码。
  3. 策略模式提供了一种可以替换继承关系的办法。
  4. 使用策略模式可以避免多重条件选择语句。
  5. 策略模式提供了一种算法的复用机制,由于将算法单独提取出来封装在策略类中,因此不同的环境内可以方便的复用这些策略类。

缺点

  1. 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
  2. 策略模式将造成系统产生很多的具体策略类,任何细小的变化都将导致系统要增加一个新的具体策略类。
  3. 无法同时在客户端使用多个策略类。

适用环境

  1. 一个系统需要动态地在几种算法中选择一种。
  2. 一个对象有很多行为,如果不用恰当的模式,这些行为则只好使用多种条件选择语句来实现。
  3. 不希望客户端知道复杂的、与算法相关的数据结构。

一些理解

创建一个抽象类(面对抽象编程),然后创建一些类去继承它,然后具体实现。创建一个环境类,定义一些公有的方法和参数(也可以把Client客户类当做环境类,这里是进一步封装,也避免客户端知道关于具体实现的一些东西,遵循了接口隔离原则)。把抽象类当做成员变量传入环境类。关系是聚合。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值