0

如何在我的项目中实现 TableDecorator。谁能提供我的步骤或代码。

4

3 回答 3

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());
于 2011-04-06T09:12:27.070 回答
1

以下类使用装饰器模式:

  • 的所有子类java.io.InputStream, OutputStream, Reader and Writer都有一个构造函数,该构造函数采用相同类型的实例。

  • 几乎所有java.util.List, Set 和 Map 的实现都有一个构造函数,它采用相同类型的实例。

  • java.util.CollectionscheckedXXX(), synchronizedXXX() and unmodifiableXXX()方法。

  • javax.servlet.http.HttpServletRequestWrapper and HttpServletResponseWrapper

于 2011-04-06T09:18:37.617 回答
0

好的,显然我们正在谈论这个TableDecorator类。

虽然它是抽象的,但它没有抽象方法,所以我猜abstract修饰符只是为了阻止您实例化超类,请改用其中一个子类:

直接已知子类: MultilevelTotalTableDecorator, TotalTableDecorator

(我不认为你打算实现你自己的TableDecorator类)

于 2011-04-06T09:28:17.297 回答