Java 设计模式中的策略模式
策略模式基础概念
策略模式是一种行为型设计模式,它能让你定义一些算法并将其封装到具有公共接口的独立类中。由于所有策略类都实现了相同的接口,因此它们可以自由地相互替换。
策略模式的结构
策略模式的核心在于定义一个策略接口(Istrategy),所有的算法都实现这个接口;然后定义一个上下文类(Context),这个上下文类有一个策略接口类型的成员变量strategy,初始化时或者运行时动态地给这个成员变量赋值,从而使得上下文类可以使用不同的算法。
public interface IStrategy {
void algorithm();
}
public class ConcreteStrategyA implements IStrategy {
@Override
public void algorithm() {
// 算法A的具体实现
}
}
public class ConcreteStrategyB implements IStrategy {
@Override
public void algorithm() {
// 算法B的具体实现
}
}
public class Context {
private IStrategy strategy;
public Context(IStrategy strategy) {
this.strategy = strategy;
}
public void setStrategy(IStrategy strategy) {
this.strategy = strategy;
}
public void doStrategy() {
if (strategy != null) {
strategy.algorithm();
}
}
}
策略模式的应用场景
策略模式通常在以下场景中使用:
- 当你有许多类似的算法,以相同的方式处理数据时,可以使用策略模式。
- 当你需要在运行时选择算法的不同变体时,可以使用策略模式。
- 当您想要隐藏算法的实现细节时,可以使用策略模式。
策略模式的示例
示例1:支付方式算法
假设你正在开发一个电商网站,你需要允许用户选择不同的支付方式来支付订单。你可以使用策略模式来实现。
public interface PaymentStrategy {
void pay(double amount);
}
public class AlipayStrategy implements PaymentStrategy {
@Override
public void pay(double amount) {
System.out.println("通过支付宝支付了" + amount + "元");
}
}
public class WechatPayStrategy implements PaymentStrategy {
@Override
public void pay(double amount) {
System.out.println("通过微信支付了" + amount + "元");
}
}
public class Order {
private PaymentStrategy strategy;
public void setStrategy(PaymentStrategy strategy) {
this.strategy = strategy;
}
public void pay(double amount) {
if (strategy != null) {
strategy.pay(amount);
}
}
}
public class Client {
public static void main(String[] args) {
PaymentStrategy strategy = new AlipayStrategy();
Order order = new Order();
order.setStrategy(strategy);
order.pay(100);
strategy = new WechatPayStrategy();
order.setStrategy(strategy);
order.pay(200);
}
}
示例2:排序算法
假设你正在开发一个工具程序,你需要支持各种排序算法,包括冒泡排序、快速排序、插入排序等。你可以使用策略模式来实现。
public interface SortStrategy {
void sort(int[] data);
}
public class BubbleSortStrategy implements SortStrategy {
@Override
public void sort(int[] data) {
// 冒泡排序的具体实现
}
}
public class QuickSortStrategy implements SortStrategy {
@Override
public void sort(int[] data) {
// 快速排序的具体实现
}
}
public class InsertionSortStrategy implements SortStrategy {
@Override
public void sort(int[] data) {
// 插入排序的具体实现
}
}
public class Sorter {
private SortStrategy strategy;
public void setStrategy(SortStrategy strategy) {
this.strategy = strategy;
}
public void sort(int[] data) {
if (strategy != null) {
strategy.sort(data);
}
}
}
public class Client {
public static void main(String[] args) {
SortStrategy strategy = new BubbleSortStrategy();
Sorter sorter = new Sorter();
sorter.setStrategy(strategy);
int[] data = {5, 4, 3, 2, 1};
sorter.sort(data);
strategy = new QuickSortStrategy();
sorter.setStrategy(strategy);
sorter.sort(data);
strategy = new InsertionSortStrategy();
sorter.setStrategy(strategy);
sorter.sort(data);
}
}
以上是策略模式的完整攻略,通过两个示例的讲解,你应该能够更好地理解策略模式的概念,以及在实际开发中如何应用策略模式来解决问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 设计模式中的策略模式详情 - Python技术站