【发布时间】:2018-12-23 20:52:17
【问题描述】:
我创建装饰器模式示例:
界面:
public interface Printer {
void print(String message);
}
实现:
public class StringPrinter implements Printer {
public void print(String message) {
System.out.println(message);
}
}
和 2 个装饰器:
将字符串改为大写:
public class UpCasePrinter implements Printer {
private Printer printer;
public UpCasePrinter(Printer printer) {
this.printer = printer;
}
public void print(String message) {
printer.print(message.toUpperCase());
}
}
打印反向字符串:
public class InversePrinter implements Printer {
private Printer printer;
public InversePrinter(Printer printer) {
this.printer = printer;
}
public void print(String message) {
StringBuilder builder = new StringBuilder(message);
printer.print(builder.reverse().toString());
}
}
一切正常。但是在阅读不同站点上的示例时,我发现了不同的实现。每个描述符 extends 来自另一个。并且看到了BufferedInputStream的实现
BufferedInputStream extends FilterInputStream
FilterInputStream extends InputStream
public abstract class InputStream implements Closeable
我无法理解以下内容:
如何创建装饰器有区别吗?至于我 - 装饰器
implements与原始类或示例中的接口相同 - 装饰器是来自另一个装饰器的extends等。link for extends realization可能只是因为在开始时选择了抽象类而不是接口而在示例中使用了 BufferedInputStream 这样的实现?
编辑:
也就是说,我不明白CarDecorator有什么用
LuxerCar和SportsCar可以implement Car接口和not extends来自CarDecorator。有什么好处?
【问题讨论】:
标签: java design-patterns decorator