程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java設計形式之裝潢形式(Decorator形式)引見

Java設計形式之裝潢形式(Decorator形式)引見

編輯:關於JAVA

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)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved