Java設計形式之裝潢形式(Decorator形式)引見。本站提示廣大學習愛好者:(Java設計形式之裝潢形式(Decorator形式)引見)文章只能為提供參考,不一定能成為您想要的結果。以下是Java設計形式之裝潢形式(Decorator形式)引見正文
Decorator常被翻譯成"裝潢",我認為翻譯成"油漆工"更抽象點,油漆工(decorator)是用來刷油漆的,那末被刷油漆的對象我們稱decoratee。這兩種實體在Decorator形式中是必需的。
Decorator界說:靜態給一個對象添加一些額定的職責,就象在牆上刷油漆。應用Decorator形式比擬用生成子類方法到達功效的擴大顯得更加靈巧。
為何應用Decorator
我們平日可使用繼續來完成功效的拓展,假如這些須要拓展的功效的品種很單一,那末必將生成許多子類,增長體系的龐雜性,同時,應用繼續完成功效拓展,我們必需可預感這些拓展功效,這些功效是編譯時就肯定了,是靜態的。
應用Decorator的來由是:這些功效須要由用戶靜態決議參加的方法和機會。Decorator供給了"即插即用"的辦法,在運轉時代決議什麼時候增長何種功效。
若何應用裝潢形式
舉Adapter中的打樁示例,在Adapter中有兩品種:方形樁 圓形樁,Adapter形式展現若何綜合應用這兩個類,在Decorator形式中,我們是要在打樁時增長一些額定功效,好比,挖坑 在樁上釘木板等,不關懷若何應用兩個不相干的類。
我們先樹立一個接口:
public interface Work{
public void insert();
}
接口Work有一個詳細完成:拔出方形樁或圓形樁,這兩個差別對Decorator是無所謂。我們以拔出方形樁為例:
public class SquarePeg implements Work{
public void insert(){
System.out.println("方形樁拔出");
}
}
如今有一個運用:須要在樁打入前,挖坑,在打入後,在樁上釘木板,這些額定的功效是靜態,能夠隨便增長調劑修正,好比,能夠又須要在打樁以後釘架子(只是比方)。
那末我們應用Decorator形式,這裡方形樁SquarePeg是decoratee(被刷油漆者),我們須要在decoratee上刷些"油漆",這些油漆就是那些額定的功效。
public class Decorator implements Work{
private Work work;
//額定增長的功效被打包在這個List中
private ArrayList others = new ArrayList();
//在結構器中應用組合new方法,引入Work對象;
public Decorator(Work work){
this.work=work;
others.add("挖坑");
others.add("釘木板");
}
public void insert(){
newMethod();
}
//在新辦法中,我們在insert之前增長其他辦法,這裡順序前後是用戶靈巧指定的
public void newMethod(){
otherMethod();
work.insert();
}
public void otherMethod(){
ListIterator listIterator = others.listIterator();
while (listIterator.hasNext()){
System.out.println(((String)(listIterator.next())) + " 正在停止");
}
}
}
在上例中,我們把挖坑和釘木板都排在了打樁insert後面,這裡只是舉例解釋額定功效順序可以隨意率性支配。
好了,Decorator形式出來了,我們看若何挪用:
Work squarePeg = new SquarePeg();
Work decorator = new Decorator(squarePeg);
decorator.insert();
Decorator形式至此完成。
假如你仔細,會發明,下面挪用相似我們讀取文件時的挪用:
FileReader fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr);
現實上Java 的I/O API就是應用Decorator完成的,I/O變種許多,假如都采用繼續辦法,將會發生許多子類,明顯相當繁瑣。
Jive中的Decorator完成
在服裝論壇t.vhao.net體系中,有些特殊的字是不克不及湧現在服裝論壇t.vhao.net中如"打垮XXX",我們須要過濾這些"革命"的字體。不讓他們湧現或許高亮度顯示。
在IBM Java專欄中專門談Jive的文章中,有談及Jive中ForumMessageFilter.java應用了Decorator形式,其實,該法式並沒有真正應用Decorator,而是提醒說:針對特殊服裝論壇t.vhao.net可以設計額定增長的過濾功效,那末便可以重組ForumMessageFilter作為Decorator形式了。
所以,我們在分辯能否真恰是Decorator形式,和會真正應用Decorator形式,必定要掌握好Decorator形式的界說,和個中介入的腳色(Decoratee 和Decorator)。