如何在我的项目中实现TableDecorator。任何人都可以为我提供步骤或代码。
答案 0 :(得分:2)
“装饰者”不是一个类,而是一个设计模式。你可以在java.io
包中找到很多这种模式的实现(例如查看流)
一个突出的例子,就是BufferedInputStream
。这个类通过添加一些缓冲来装饰任何InputStream
。
简单示例:
public interface GreetProvider { public String greet(); }
public class HelloProvider implements GreetProvider {
public String greet() {
return "Hello";
}
}
public class ByeProvider implements GreetProvider {
public String greet() {
return "Good Bye";
}
}
public class SmilyDecorator implements GreetProvider {
private GreetProvider provider;
public SmilyDecorator(GreetProvider provider) {this.provider = provider;}
public String greet() {
return provider.greet() + " :-)";
}
}
// somwhere in some method
GreetProvider hello = new HelloProvider();
GreetProvider bye = new ByeProvider();
GreetProvider helloAndSmiley = new SmileyDecorator(hello);
GreetProvider helloAndTwoSmileys = new SmileyDecorator(helloAndSmiley);
System.out.printf("%s%n%s%n%s%n%s%n",
hello.greet(), bye.greet(),
helloAndSmiley.greet(), helloAndTwoSmileys.greet());
答案 1 :(得分:1)
以下课程使用装饰模式:
java.io.InputStream, OutputStream, Reader and Writer
的所有子类都有一个构造函数,它采用相同类型的实例。
java.util.List
,Set和Map的几乎所有实现都有一个构造函数,它采用相同类型的实例。
java.util.Collections
,checkedXXX(), synchronizedXXX() and unmodifiableXXX()
方法。
javax.servlet.http.HttpServletRequestWrapper and HttpServletResponseWrapper
答案 2 :(得分:0)
好的,显然我们正在谈论这个TableDecorator
课程。
虽然它是抽象的,但它没有抽象方法,所以我想abstract
修饰符只是为了阻止你实例化超类,而是使用其中一个子类:
(我认为你不打算实现自己的TableDecorator
类)