java设计模式学习(二)策略模式

本文深入探讨策略模式的概念,通过实例解释如何实现一组算法的抽象,达到算法与使用环境的解耦。适用于需要在不同场景下灵活选择算法的应用场景。

摘要生成于 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.
策略模式定义了一组算法,各自封装,并且可以互相替代。策略算法使得算法和使用算法的客户端非常的独立。也就是实现了算法和使用环境的解耦。

概括一下就是三个词:行为 环境 解耦
类图
这里写图片描述

角色分析:
Strategy:a family of algorithms的父接口或抽象父类
ConcreteStrategy:a family of algorithms,封装了具体的算法。
Context:即”clients that use it”,持有一个Strategy的引用。可以具体实例化为一个ConcreteStrategy

举例
这个例子是实现商场购物一组优惠算法,包括满额现金赠送、满额减免、折扣、满额积分赠送。为了节省篇幅具体算法没有实现,只是做了一个打印。

/*
*  Strategy
*/
public abstract class PromotionStrategy {
 public void promote() {
 }
}
/*
* ConcreteStrategy1
*/
public class Derate extends PromotionStrategy {
 public void promote() {
  System.out.println("减免");
 }
}
/*
* 
ConcreteStrategy2
*/

public class Discount extends PromotionStrategy {
 public void promote() {
  System.out.println("打折");
 }
}
/*
*ConcreteStrategy3
*/

public class RewardCash extends PromotionStrategy {
 public void promote() {
  System.out.println("现金赠送");
 }
}
/*
* ConcreteStrategy4
*/

public class RewardCredits extends PromotionStrategy {
 public void promote() {
  System.out.println("积分赠送");
 }
}
/*
*Context
*/
public class Client {
 PromotionStrategy strategy;

 public Client(PromotionStrategy strategy){
  this.strategy = strategy;
 }
 public static void main(String[] args) {
  Client client = new Client(new Discount());
  client.strategy.promote();
 }
}

这样就实现了一组算法的抽象。

适用场景
多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。
对客户隐藏具体策略(算法)的实现细节,彼此完全独立。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值