装饰模式

  1. 0x00 装饰模式
  2. 0x01 对比代理模式

0x00 装饰模式

装饰模式(Decorator Pattern)是一种结构型设计模式,它允许在不改变现有类结构的前提下,动态地给对象添加新的功能。装饰模式通常用于替代继承,尤其是在需要扩展功能但又不想通过子类来实现的情况下。

在Java中,装饰模式的基本结构包括以下几个部分:

  1. 抽象组件(Component):定义了一个公共接口,所有具体组件和装饰器都必须实现该接口。
  2. 具体组件(Concrete Component):实现了抽象组件接口,并提供了基本的行为。
  3. 装饰器(Decorator):同样实现了抽象组件接口,它包含一个指向抽象组件类型的引用。装饰器通过其构造函数接收一个抽象组件对象,并通过组合而非继承的方式来扩展功能。
  4. 具体装饰器(Concrete Decorator):实现装饰器接口,并负责添加新行为或者修改现有行为。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// 首先定义抽象组件接口:
public interface TextMessage {
String getText();
}

// 接着定义具体组件:
public class PlainTextMessage implements TextMessage {
private final String text;

public PlainTextMessage(String text) {
this.text = text;
}

@Override
public String getText() {
return text;
}
}

// 然后定义一个基础的装饰器类:
public abstract class TextDecorator implements TextMessage {
protected TextMessage message;

public TextDecorator(TextMessage message) {
this.message = message;
}

@Override
public String getText() {
return message.getText();
}
}

// 定义具体的装饰器类来扩展功能,例如加密和压缩:
public class EncryptedTextDecorator extends TextDecorator {
public EncryptedTextDecorator(TextMessage message) {
super(message);
}

@Override
public String getText() {
String encryptedText = encrypt(super.getText());
return encryptedText;
}

private String encrypt(String text) {
// 这里可以实现简单的加密逻辑
return "Encrypted: " + text;
}
}

public class CompressedTextDecorator extends TextDecorator {
public CompressedTextDecorator(TextMessage message) {
super(message);
}

@Override
public String getText() {
String compressedText = compress(super.getText());
return compressedText;
}

private String compress(String text) {
// 这里可以实现简单的压缩逻辑
return "Compressed: " + text;
}
}

// 最终调用
public class Client {
public static void main(String[] args) {
TextMessage originalMessage = new PlainTextMessage("Hello, world!");
TextMessage compressedMessage = new CompressedTextDecorator(originalMessage);
TextMessage encryptedMessage = new EncryptedTextDecorator(compressedMessage);

System.out.println(encryptedMessage.getText());
}
}

0x01 对比代理模式

代理模式vs装饰器模式

文章标题:装饰模式

本文作者:zhu8fei

发布时间:2024-08-15, 16:57:52

最后更新:2024-08-16, 18:18:05

原始链接:http://www.zhu8fei.com/2024/08/15/ecorator-pattern.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 zhu8fei@163.com

目录
×

喜欢就点赞,疼爱就打赏