装饰器模式java
时间: 2023-06-29 14:06:20 浏览: 109
装饰器模式是一种结构型设计模式,它允许您通过将对象包装在具有类似行为的装饰器对象中来动态地修改对象的行为。
在 Java 中,您可以使用装饰器模式来创建包装器类,这些类将一个或多个对象包装在一个类中,并向其添加新的行为。以下是一个简单的装饰器示例,该示例向一个文本字符串添加了加密和解密功能:
首先,我们定义一个接口 `Text` 用于表示文本字符串,并实现一个具体的类 `PlainText` 来表示未加密的文本字符串:
```java
public interface Text {
String getContent();
}
public class PlainText implements Text {
private String content;
public PlainText(String content) {
this.content = content;
}
@Override
public String getContent() {
return content;
}
}
```
接下来,我们定义一个抽象的装饰器类 `TextDecorator`,它实现了 `Text` 接口并对其进行了包装。注意,装饰器类的构造函数接受一个 `Text` 对象作为参数:
```java
public abstract class TextDecorator implements Text {
private Text text;
public TextDecorator(Text text) {
this.text = text;
}
@Override
public String getContent() {
return text.getContent();
}
}
```
现在,我们可以定义一个具体的装饰器类 `EncryptionDecorator`,它使用简单的替换算法对文本字符串进行加密:
```java
public class EncryptionDecorator extends TextDecorator {
public EncryptionDecorator(Text text) {
super(text);
}
@Override
public String getContent() {
String content = super.getContent();
StringBuilder builder = new StringBuilder();
for (int i = 0; i < content.length(); i++) {
builder.append((char)(content.charAt(i) + 1));
}
return builder.toString();
}
}
```
最后,我们定义一个 `DecryptionDecorator` 类,它使用相同的替换算法对文本字符串进行解密:
```java
public class DecryptionDecorator extends TextDecorator {
public DecryptionDecorator(Text text) {
super(text);
}
@Override
public String getContent() {
String content = super.getContent();
StringBuilder builder = new StringBuilder();
for (int i = 0; i < content.length(); i++) {
builder.append((char)(content.charAt(i) - 1));
}
return builder.toString();
}
}
```
现在,我们可以使用以下代码创建一个文本字符串,将其加密,然后再解密:
```java
Text text = new PlainText("Hello world!");
text = new EncryptionDecorator(text);
text = new DecryptionDecorator(text);
System.out.println(text.getContent());
```
输出应该是 `Hello world!`。注意,我们可以使用多个装饰器来对文本字符串进行多次包装,从而添加更多的行为。
阅读全文