Java设计模式——策略模式

本文介绍了策略模式的概念及其在软件设计中的应用。策略模式定义了一系列可互换的算法,并封装成独立的类,使得算法的变化不会影响到使用算法的客户端。通过上下文环境、抽象策略和具体策略三个角色的介绍,展示了策略模式的结构组成。该模式遵循开闭原则,易于扩展新的算法实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

策略模式(Strategy)定义了一个算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化不会影响到使用算法的客户。
策略模式的结构组成如下所示:
策略模式结构图

角色组成

策略模式涵盖了3个角色,分别是上下文环境、基本的策略基类和具体的策略执行类。
1)上下文环境(Context)角色:持有一个Strategy的引用。
2)抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。 此角色给出所有的具体策略类所需的接口。
3)具体策略(ConcreteStrategy)角色:包装了相关的算法或行为。

代码举例

首先,定义一个策略基类(接口或者抽象类),这里我们就以《大话设计模式中的》这本书中的算法为例,个人觉得这个实例很好不需要再专门找其他的例子了。

/**
  *策略模式基类
  */
abstract class BaseStrategy{
    //算法方法
    public abstract void algorithmInterface();
}

然后,再定义两个具体的策略模式执行类。

/**
  *策略模式具体的执行类ConcreteStrategyA
  */
public class ConcreteStrategyA extends BaseStrategy{
    //算法方法
    @Override
    public abstract void algorithmInterface(){
            System.out.println("算法A的具体实现");
    }
}
/**
  *策略模式具体的执行类ConcreteStrategyA
  */
public class ConcreteStrategyB extends BaseStrategy{
    //算法方法
    @Override
    public abstract void algorithmInterface(){
            System.out.println("算法B的具体实现");
    }
}

最后,我们再编写一个用来配置和维护一个BaseStrategy对象的上下文。

public class StrategyContext{
    public BaseStrategy mStrategy;
    public StrategyContext(BaseStrategy baseStrategy){
            this.mStrategy = baseStrategy;
    }
    public void executeAlgorithm(){
            this.mStrategy.algorithmInterface();
    }
}

模式评价

策略模式就是将一系列完成相类似的工作的方法进行抽象。这样大家都继承自相同的抽象类,或者实现同样的接口,只是具体的实现上稍微有些差异。经过抽象,可以大大降低了各种算法的耦合性,提高了共性,便于集中管理。
本实例中,如果需要一个新的算法实现,那么只要新增一个具体的实现类,他继承策略基类,覆写其实现。既可以各种具体的实现类互不干扰,在实例化时也可以相互替换。充分体现了对修改关闭,对新增 开放的开闭原则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值