策略模式

Strategy Pattern

  1. 定义策略模式定义了算法族(实现同一个接口),分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
  2. 场景实现一个功能有多种策略(算法),我们可以根据环境或者条件来选择一个。
  3. 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();
}
}

输出结果

posted @   bkycrab  阅读(269)  评论(0编辑  收藏  举报
编辑推荐:
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 在缓慢中沉淀,在挑战中重生!2024个人总结!
· 大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来!
· 从 Windows Forms 到微服务的经验教训
点击右上角即可分享
微信分享提示