设计模式读书笔记之策略模式(Strategy)

本文介绍了策略模式的概念及其在软件设计中的应用。策略模式允许算法独立于客户端变化,通过封装不同的算法并能在运行时进行切换,提高了代码的灵活性和可扩展性。

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

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化.
(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable.

Strategy lets the algorithm vary independently from clients that use it.)

策略模式的特点:
1 Context(应用实例或client, 即使用Strategy的类)持有一个Strategy实例;
2 Context可以动态灵活的设置Strategy的具体实例,即切换算法;
3 Context通过调用strategy的方法来执行具体的行为。

示例代码:

这个例子很抽象,大多数的设计模式书中都会给出这么个例子,这个例子不具备任何生产价值,于是我想到了一个更好的例子:
笔记本电脑中都有一个电源管理器,提供多种电源管理方案。每个方案都是一种策略,操作系统(或使用电脑的人)应该能灵活切换供电方案。下面用代码模拟:

经典案例:

1 jdk中的类File有一个方法:public String[] list(FilenameFilter filter),列出当前目录下的所有文件,FilenameFilter就是一个策略接口,使用者可以根据自己的需求自由变换文件筛选策略.
2 jdk中工具类Arrays有一个可以对集合排序的方法: public static <T> void sort(T[] a, Comparator<? super T> c),传入一个数组和一个比较器, 这个比较器就是一个策略.(此案有争议,有人认为是template method模式).

应用场景:
1 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为;
2 需要在不同情况下使用不同的策略(算法)。

优点:
把容易发生变化的算法独立出来,易于扩展。

缺点:

类增多了,使系统难度加大。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值