天天看點

裝飾設計模式

裝飾設計模式:Decorator Pattern,又稱裝飾者模式。特點是可以在不改變這個類的情況下,動态的為其添加新的功能,在運作時動态對對象進行擴充。主要實作方式是通過将其包裝成另一個對象并添加新的功能來實作動态的添加功能。也就是說,是通過另一個類來将本來的對象包裹其中。

在實作的時候需要注意使裝飾對象和真實對象使用相同的接口,這樣可以使用戶端對象在使用的時候用相同的接口來實作互動。

适用的場合:

需要擴充一個類的功能,并動态的賦予對象新的特性時。

需要動态的為對象添加新的功能,且需要動态的撤銷這些功能時。

需要增加一些基本功能的排列組合産生大量功能時。

優點:

雖然直接繼承同樣可以實作裝飾模式的功能,但是裝飾模式可以提供比直接的繼承方式更多的靈活性。并且可以根據不同的排列組合産生不同的結果。

缺點:

比普通的繼承複雜度更高。

會産生過多的類,如果過度使用,會使項目的複雜性提高。

UML圖如下:

​​

裝飾設計模式

​​

下面是代碼:

public class test
{
public static void main(String args[])
{
Component com=new Component();
DecortorA a=new DecortorA();
DecortorB b=new DecortorB();
a.add(com);
b.add(a);
b.show();
System.out.println();
}
}
class Component
{
String name="com";
void show()
{
System.out.println(name);
}
}
class DecortorBase extends Component
{
Component com;
void show()
{
System.out.println("Decortor");}
}
class DecortorA extends DecortorBase
{
void add(Component c)
{
com=c;
}
void show()
{
System.out.println("A");
com.show();
}
}
class DecortorB extends DecortorBase
{
void add(Component c)
{
com=c;
}
void show()
{
System.out.println("B");
com.show();
}
}      

運作結果如下:

裝飾設計模式

繼續閱讀