装饰模式
创建时间:
0x00 装饰模式
装饰模式(Decorator Pattern)是一种结构型设计模式,它允许在不改变现有类结构的前提下,动态地给对象添加新的功能。装饰模式通常用于替代继承,尤其是在需要扩展功能但又不想通过子类来实现的情况下。
在Java中,装饰模式的基本结构包括以下几个部分:
- 抽象组件(Component):定义了一个公共接口,所有具体组件和装饰器都必须实现该接口。
- 具体组件(Concrete Component):实现了抽象组件接口,并提供了基本的行为。
- 装饰器(Decorator):同样实现了抽象组件接口,它包含一个指向抽象组件类型的引用。装饰器通过其构造函数接收一个抽象组件对象,并通过组合而非继承的方式来扩展功能。
- 具体装饰器(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" 转载请保留原文链接及作者。