ITPub博客

首页 > 数据库 > 数据库开发技术 > 聊聊策略模式

聊聊策略模式

原创 数据库开发技术 作者:后端Q 时间:2023-11-02 00:00:00 0 删除 编辑

1、简介

策略模式就是把各个平等的具体实现进行抽象、封装成为独立的算法类,然后通过上下文和具体的算法类来进行交互。各个策略算法都是平等的,地位是一样的,正是由于各个算法的平等性,所以它们才是可以相互替换的。虽然我们可以动态的切换各个策略,但是同一时刻只能使用一个策略。

2、范例

比如去服装店买衣服,普通会员不打折,黄金会员打9折,铂金会员打8折,钻石会员打7折,这样不同的客户价格计算方式不同,这个时候就可以使用策略模式。

3、代码实现

3.1、定义接口

public interface IStrategy {
public void operate();
}
复制代码

3.2、 根据会员等级,设置对应折扣

public class BackDoor implements IStrategy {
@Override
public void operate() {
System.out.println("打9折");
}
}
复制代码

public class GivenGreenLight implements IStrategy {
@Override
public void operate() {
System.out.println("打8折");
}
}
复制代码

public class BlackEnemy implements IStrategy {
@Override
public void operate() {
System.out.println("打7折");
}
}
复制代码

3.3、定义上下文,构造函数,使用哪个方法

public class Context {
private IStrategy strategy;
//构造函数,要你使用哪个方法
public Context(IStrategy strategy){
this.strategy = strategy;
}
public void setStrategy(IStrategy strategy){
this.strategy = strategy;
}
public void operate(){
this.strategy.operate();
}
}
复制代码

3.4、测试,达到预期效果

public class Zhaoyun {
public static void main(String[] args) {
Context context;
System.out.println("----------黄金会员---------------");
context = new Context(new BackDoor());
context.operate();
System.out.println("\n");
System.out.println("----------铂金会员---------------");
context.setStrategy(new GivenGreenLight());
context.operate();
System.out.println("\n");
System.out.println("----------钻石会员---------------");
context.setStrategy(new BlackEnemy());
context.operate();
System.out.println("\n");
}
}
复制代码

4、优点

我们之前在选择方式的时候,往往会使用if-else语句,也就是用户不选择A那么就选择B这样的一种情况。这种情况耦合性太高了,而且代码臃肿,有了策略模式我们就可以避免这种现象,策略模式遵循开闭原则,实现代码的解耦合。扩展新的方法时也比较方便,只需要继承策略接口就好了。




原文作者:后端Q;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2023-01-22

  • 博文量
    1540
  • 访问量
    726033