Java设计模式-策略模式详解

1.策略模式基本了解

策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一组可以相互替换的算法,使得客户端可以根据不同的需求选择不同的算法,将对象和行为分开。

在策略模式中,我们创建了一个策略接口,该接口定义了所有必需的方法。然后,我们创建了实现了该策略接口的具体策略类。最后,客户端代码在运行时根据需求选择不同的策略。

策略模式的主要优点是它使得算法可以自由切换,避免了使用多重条件语句判断,提高了代码的可维护性和扩展性。缺点是随着策略的增多,所有策略类都需要对外暴露,这可能导致客户端代码过于复杂。

if-else也可以实现,但是我们最终的目的不就是为了可维护性高,以及装逼嘛(开个玩笑),毕竟很多Java的框架源代码都用到了这种模式,了解之后有助于学习这些框架。

2.三要素

  • 策略接口:策略接口定义了所有具体策略类必须实现的方法
  • 具体策略类:具体策略类实现了策略接口,并提供了具体的算法实现
  • 上下文类:上下文类持有一个策略接口的引用,并在运行时根据需要调用具体策略类的方法

3.使用场景:

即不同的对象对于同一动作有不同的行为的时候。

比如同样都是支付行为,微信支付没有优惠,支付宝支付有优惠。支付动作可以定义在策略接口,微信支付和支付宝支付分别实现这个接口,然后支付者作为使用者有一个统一的支付方法,参数就是支付策略接口,那么选择支付宝支付,就是策略接口指向支付宝支付实现类,然后调用支付方法。

// 策略接口 interface Strategy {     void execute(); }  // 具体策略类1 class ConcreteStrategy1 implements Strategy {     @Override     public void execute() {         System.out.println("执行策略1");     } }  // 具体策略类2 class ConcreteStrategy2 implements Strategy {     @Override     public void execute() {         System.out.println("执行策略2");     } }  // 上下文类 class Context {     private Strategy strategy;      public Context(Strategy strategy) {         this.strategy = strategy;     }      public void executeStrategy() {         strategy.execute();     } }  // 使用策略模式 public class Main {     public static void main(String[] args) {         Strategy strategy1 = new ConcreteStrategy1();         Strategy strategy2 = new ConcreteStrategy2();          Context context = new Context(strategy1);         context.executeStrategy();          context.setStrategy(strategy2);         context.executeStrategy();     } }

Java设计模式-策略模式详解

 

Java设计模式-策略模式详解

 

 

 知识点补充:

在Java中,接口是一种抽象的数据类型,它定义了一组方法的签名,但没有提供方法的具体实现。接口可以被类实现,一个类可以实现一个或多个接口。

当你创建一个接口的对象时,你实际上是创建了一个指向具体实现类的引用。这意味着你可以使用接口类型的引用来调用实现类中定义的方法。

发表评论

评论已关闭。

相关文章

当前内容话题