2011-04-06 95 views
0

如何在我的項目中實現TableDecorator。任何人都可以爲我提供這些步驟或代碼。如何實現TableDecorator?

+3

哪個裝飾類? – Bozho 2011-04-06 09:11:54

+0

@Andreas說得好:) – 2011-04-06 09:16:25

+1

請參閱BalusC的優秀[GoF設計模式答案](http://stackoverflow.com/questions/1673841/examples-of-gof-design-patterns/2707195#2707195)以使用裝飾器Java庫中的模式 – 2011-04-06 09:22:14

回答

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()); 
+0

接收答案後更改主題和內容不是很好 - 請注意,我的答案適用於此問題的原始版本... – 2011-04-06 09:29:28

1

以下類使用Decorator模式:

  • java.io.InputStream, OutputStream, Reader and Writer所有子類有一個構造採取相同類型的實例。

  • 幾乎所有java.util.List,Set和Map的實現都有一個構造函數,它帶有一個相同類型的實例。

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

  • javax.servlet.http.HttpServletRequestWrapper and HttpServletResponseWrapper

0

OK,顯然我們正在談論這個TableDecorator類。

雖然它是抽象的,它沒有抽象方法,所以我想abstract修改僅僅是從實例化超類阻止你,使用子類,而不是一個:

直接已知子類: MultilevelTotalTableDecoratorTotalTableDecorator

(我不認爲你是爲了實現自己的TableDecorator類)