装饰器模式是一种结构型设计模式,它允许用户在不改变现有对象的情况下向一个对象添加新的功能。在 Java 中,装饰器模式经常用来动态地给对象添加额外的行为,如日志记录、事务管理、安全检查等。
装饰器模式涉及四个主要角色:组件(Component)、具体组件(Concrete Component)、装饰器(Decorator)和具体装饰器(Concrete Decorator)。组件定义了接口,具体组件实现了这个接口,装饰器持有对另一个相同接口的具体组件的引用,并且可以在调用具体组件的方法前后增加自己的行为。具体装饰器则扩展了具体组件,增加了额外的功能。
在 Java IO 流库中广泛使用了装饰器模式,比如 `BufferedReader` 和 `FileReader`。你可以先创建一个 `FileReader` 对象,然后使用 `new BufferedReader()` 将其包装起来,这样就获得了缓冲读取的能力。
使用装饰器模式的一个简单示例:
```java
// 给定一个字符串列表,找出列表中所有字符串的最长公共前缀
public class LongestCommonPrefixFinder {
public static void main(String[] args) {
List<String> strings = Arrays.asList("flower", "flow", "flight");
String longestCommonPrefix = findLongestCommonPrefix(strings);
System.out.println("最长公共前缀是: " + longestCommonPrefix);
}
public static String findLongestCommonPrefix(List<String> strings) {
if (strings == null || strings.isEmpty()) {
return "";
}
String prefix = strings.get(0);
for (int i = 1; i < strings.size(); i++) {
while (strings.get(i).indexOf(prefix) != 0) {
// 如果不是前缀,则不断缩短前缀
prefix = prefix.substring(0, prefix.length() - 1);
// 如果前缀缩短为0,说明没有共同前缀
if (prefix.isEmpty()) {
return "";
}
}
}
return prefix;
}
}
```
装饰器模式是一种结构型设计模式,它允许在不改变现有对象的基础上向一个对象动态地添加新功能。这种模式在许多情况下非常有用,特别是当你想给对象添加附加行为而不影响其他对象时。例如,在 Java IO 流库中,你可以使用装饰器模式来给 `FileReader` 添加缓冲能力,从而提高读取效率