策略模式
Strategy Pattern
定义
策略模式定义了算法族(实现同一个接口),分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。场景
实现一个功能有多种策略(算法),我们可以根据环境或者条件来选择一个。OO原则
- 封装变化的部分,把变化的部分独立出来不影响不变的部分,使系统更有弹性
- 多用组合,少用继承
- 针对接口编程,不针对实现编程
示例场景
某宝通过蚂蚁积分升级会员,大众会员具有最基本的特权,升级为黄金会员,铂金会员,钻石会员后有对应的特权。
类图
示例代码
环境Context类
public class Vip { //将会员特权委托(delegate)给接口的对象处理 public Privilege privilege; public void performPrivilege() { privilege.display(); } //运行时动态指定行为 public void setPrivilege(Privilege privilege) { this.privilege = privilege; } public void basic() { System.out.println("fundamental rights"); } }
抽象策略类
public interface Privilege { public void display(); }
具体策略类
public class BasicMember implements Privilege { @Override public void display() { System.out.println("i'm common"); } }
测试类
public class Test extends Vip{ public Test() { //默认大众会员 privilege = new BasicMember(); } public static void main(String[] args) { Vip vip = new Test(); vip.basic(); vip.performPrivilege(); vip.setPrivilege(new GoldMember()); vip.performPrivilege(); } }
输出结果
不为当下而战,何以颠覆未来
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· 本地部署 DeepSeek:小白也能轻松搞定!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 在缓慢中沉淀,在挑战中重生!2024个人总结!
· 大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来!
· 从 Windows Forms 到微服务的经验教训