如何实现TableDecorator?

时间:2011-04-06 09:10:21

标签: java displaytag

如何在我的项目中实现TableDecorator。任何人都可以为我提供步骤或代码。

3 个答案:

答案 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.CollectionscheckedXXX(), synchronizedXXX() and unmodifiableXXX()方法。

  • javax.servlet.http.HttpServletRequestWrapper and HttpServletResponseWrapper

答案 2 :(得分:0)

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

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

  

直接已知子类:   MultilevelTotalTableDecorator,   TotalTableDecorator

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