在JDK中,你能找到哪些策略模式的实际应用案例?请举例说明。

策略模式在 JDK 中有很多应用,以下是一些常见的例子:

  1. Java.util.Comparator:Comparator 是一个策略接口,它定义了一个策略家族,它们都可以进行对象的比较。具体的比较策略(即 Comparator 的实现类)可以根据需求进行选择,比如可以选择按照年龄排序,或者按照姓名排序等。
List<String> names = Arrays.asList("John", "Jane", "Adam", "Tom");
Collections.sort(names, new Comparator<String>() {
    @Override
    public int compare(String a, String b) {
        return a.compareTo(b);
    }
});

在这个例子中,我们使用了一个具体的 Comparator 策略来按照字母顺序排序字符串。

  1. Java.io.OutputStream:OutputStream 代表了一组策略,用于输出数据到不同类型的目标,如文件(FileOutputStream)、字节数组(ByteArrayOutputStream)、网络连接(SocketOutputStream)等。
OutputStream output = new FileOutputStream("file.txt");
output.write("Hello, world!".getBytes());

output = new ByteArrayOutputStream();
output.write("Hello, world!".getBytes());

在这个例子中,我们可以在运行时选择不同的 OutputStream 策略来输出数据。

  1. Java.util.concurrent.ThreadPoolExecutor:ThreadPoolExecutor 的构造函数接受一个 RejectedExecutionHandler 参数,这是一个策略接口,定义了当新任务在方法 execute(Runnable) 中不能被接受(例如因为线程池已满或已关闭)时的策略。
ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS,
                                                      new LinkedBlockingQueue<Runnable>(),
                                                      new ThreadPoolExecutor.AbortPolicy());

在这个例子中,我们使用了 AbortPolicy 策略,这是一个默认策略,它将抛出未检查的 RejectedExecutionException。

以上都是 JDK 中策略模式的一些应用,它们都允许在运行时选择不同的策略。

发表评论

后才能评论