设计模式之策略模式(Strategy Pattern)

本文深入解析策略模式,一种软件开发中常用的模式,通过封装一组算法在同一个接口下,实现在不改变客户端的情况下替换算法,达到实现不同功能的目的。以Java中的TreeSet为例,详细介绍了策略模式的三个组成部分:抽象策略角色、具体策略角色和环境角色。

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

策略模式是软件开发中较为常用的一种模式。简单的解释就是,对一组算法封装在同一个接口下,从而在使用的时候,不影响客户端的情况下,可以替换,实现不同功能。
实例:
Java中的TreeSet

    public TreeSet(Comparator<? super E> comparator) {
        this(new TreeMap<>(comparator));
    }

组成
1.抽象策略角色这个是一个抽象的角色,通常情况下使用接口或者抽象类去实现。对比来说,就是我们的Comparator接口。
2.具体策略角色包装了具体的算法和行为。对比来说,就是实现了Comparator接口的实现一组实现类。
3.环境角色内部会持有一个抽象角色的引用,给客户端调用。对比来说,就是我们的TreeSet类。说明:TreeSet内部一定会有一个策略类的一个成员变量,这样做的目的在于可以当我们在去创建TreeSet对象的时候,可以接收我们向TreeSet类中传递的具体的策略类。
代码

/**
 * 策略角色
 * @author Administrator
 *
 */
public interface Strategy {
    /**计算两个数,但是是和还是减还是乘还是除,或者其它,在具体实现类中才知道     */
    public int cal(int a,int b);
}
//具体的策略,这里只写了一个计算和的策略
public class AddStrategy  implements Strategy{

    @Override
    public int cal(int a, int b) {
        return a+b;
    }

}
//环境 里面有个构造方法,需要传递具体的策略
public class Environment {
    private Strategy strategy;

    public Environment(Strategy strategy) {
        super();
        this.strategy = strategy;
    }
    
    public int cal(int a,int b) {
        return strategy.cal(a, b);
    }
    
}
//测试代码
public class Test {
    public static void main(String[] args) {
        Environment en=new Environment(new AddStrategy());
        int result=en.cal(2, 3);
        System.out.println(result);//打印5
    }
}

结论:
策略模式是很简单的一个模式,简单的说就是要基于抽象编程。

点我看原帖

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值