设计模式:策略模式示例


策略模式的示例非常多样,下面是一些场景的示例及其代码实现:

示例 1: 排序策略

在需要对不同类型的数据集进行排序时,可以使用策略模式来选择不同的排序算法。

// 策略接口
public interface SortingStrategy {
    <T extends Comparable<T>> void sort(List<T> items);
}

// 具体策略类:快速排序
public class QuickSortStrategy implements SortingStrategy {
    public <T extends Comparable<T>> void sort(List<T> items) {
        // 实现快速排序逻辑
        System.out.println("QuickSort strategy is used.");
    }
}

// 具体策略类:冒泡排序
public class BubbleSortStrategy implements SortingStrategy {
    public <T extends Comparable<T>> void sort(List<T> items) {
        // 实现冒泡排序逻辑
        System.out.println("BubbleSort strategy is used.");
    }
}

// 上下文
public class SortedList {
    private SortingStrategy strategy;

    public void setSortingStrategy(SortingStrategy strategy) {
        this.strategy = strategy;
    }

    public <T extends Comparable<T>> void sort(List<T> items) {
        strategy.sort(items);
    }
}

// 客户端代码
public class StrategyPatternExample {
    public static void main(String[] args) {
        SortedList list = new SortedList();

        list.setSortingStrategy(new QuickSortStrategy());
        list.sort(new ArrayList<>(Arrays.asList(5, 3, 2, 4, 1)));

        list.setSortingStrategy(new BubbleSortStrategy());
        list.sort(new ArrayList<>(Arrays.asList(5, 3, 2, 4, 1)));
    }
}

示例 2: 支付策略

电子商务应用程序中,可以根据用户的支付方式选择不同的支付策略。

// 策略接口
public interface PaymentStrategy {
    void pay(int amount);
}

// 具体策略类:信用卡支付
public class CreditCardPayment implements PaymentStrategy {
    private String cardNumber;
    public CreditCardPayment(String cardNumber) {
        this.cardNumber = cardNumber;
    }
    public void pay(int amount) {
        System.out.println(amount + " paid with credit card.");
    }
}

// 具体策略类:PayPal支付
public class PayPalPayment implements PaymentStrategy {
    private String emailId;
    public PayPalPayment(String email) {
        this.emailId = email;
    }
    public void pay(int amount) {
        System.out.println(amount + " paid using PayPal.");
    }
}

// 上下文
public class ShoppingCart {
    private PaymentStrategy paymentStrategy;

    public void setPaymentStrategy(PaymentStrategy paymentStrategy) {
        this.paymentStrategy = paymentStrategy;
    }

    public void checkout(int amount) {
        paymentStrategy.pay(amount);
    }
}

// 客户端代码
public class StrategyPatternExample {
    public static void main(String[] args) {
        ShoppingCart cart = new ShoppingCart();

        cart.setPaymentStrategy(new CreditCardPayment("1234567890123456"));
        cart.checkout(100);

        cart.setPaymentStrategy(new PayPalPayment("myemail@example.com"));
        cart.checkout(200);
    }
}

示例 3: 压缩策略

在需要压缩文件的应用程序中,可以根据文件类型或用户的选择应用不同的压缩策略。

// 策略接口
public interface CompressionStrategy {
    void compressFiles(List<File> files);
}

// 具体策略类:ZIP压缩
public class ZipCompressionStrategy implements CompressionStrategy {
    public void compressFiles(List<File> files) {
        // 使用ZIP压缩
        System.out.println("Using ZIP compression strategy.");
    }
}

// 具体策略类:RAR压缩
public class RarCompressionStrategy implements CompressionStrategy {
    public void compressFiles(List<File> files) {
        // 使用RAR压缩
        System.out.println("Using RAR compression strategy.");
    }
}

// 上下文
public class CompressionContext {
    private CompressionStrategy strategy;

    public void setCompressionStrategy(CompressionStrategy strategy) {
        this.strategy = strategy;
    }

    public void createArchive(List<File> files) {
        strategy.compressFiles(files);
    }
}

// 客户端代码
public class StrategyPatternExample {
    public static void main(String[] args) {
        CompressionContext ctx = new CompressionContext();

        ctx.setCompressionStrategy(new ZipCompressionStrategy());
        ctx.createArchive(Collections.singletonList(new File("file1.txt")));

        ctx.setCompressionStrategy(new RarCompressionStrategy());
        ctx.createArchive(Collections.singletonList(new File("file2.txt")));
    }
}

这些示例展示了策略模式在不同场景下的应用。策略模式允许在运行时选择合适的算法或行为,同时也方便未来添加新的策略而不影响现有代码。

相关推荐

  1. 设计模式策略模式示例

    2024-04-07 06:10:02       11 阅读
  2. 设计模式策略模式讲解和代码示例

    2024-04-07 06:10:02       43 阅读
  3. 设计模式——策略模式

    2024-04-07 06:10:02       30 阅读
  4. 设计模式-策略模式

    2024-04-07 06:10:02       38 阅读
  5. 设计模式——策略模式

    2024-04-07 06:10:02       29 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-07 06:10:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-07 06:10:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-07 06:10:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-07 06:10:02       20 阅读

热门阅读

  1. 计算机网络路由的配置

    2024-04-07 06:10:02       16 阅读
  2. C语言预处理基础知识笔记

    2024-04-07 06:10:02       14 阅读
  3. YOLOv5实战记录03 数据集构建

    2024-04-07 06:10:02       14 阅读
  4. go | gin多服务 | goroutine | ReadTimeout&WriteTimeout

    2024-04-07 06:10:02       15 阅读
  5. ffmpeg 从现有视频中截取一段

    2024-04-07 06:10:02       13 阅读
  6. 如何从vue项目界面上看出来node.js版本

    2024-04-07 06:10:02       14 阅读
  7. cycle GAN

    2024-04-07 06:10:02       13 阅读
  8. Pytorch中的nn.Embedding()

    2024-04-07 06:10:02       13 阅读