可以不斷地為物件新增裝飾的設計模式被稱為decorator模式。
示例程式
為文字新增裝飾邊框
display類
該類是可以顯示多行字串的抽象類。
它繼承了display類,實現了display類中的抽象方法。stringdisplay類的例項相當於與沒有被裝飾物修飾過的原生物體。package decorator;
//被裝飾物與裝飾物的抽象父類,這樣保持了兩者之間的一致性,在show方法中使用getrows方法和getrowtext方法這裡使用的是模板方法
//在抽象類中的方法實現中使用抽象方法,這種設計模式是模板模式
public abstract class display
@override
public int getcolumns()
@override
public int getrows()
@override
public string getrowtext(int row) else
}}
border類
該類是裝飾邊框的抽象類。
通過繼承,裝飾邊框和被裝飾物具有了相同的方法,即意味著他們具有了一致性。package decorator;
//裝飾類的抽象類,與實體類一樣繼承父類,達到裝飾物與被裝飾物的一致性,從而形成遞迴形式
public abstract class border extends display
}
sideborder類
該類是一種具體的裝飾類。
它是border類的子類,該類是用指定的字元裝飾字串兩側的類。package decorator;
//裝飾類的具體類
public class sideborder extends border
//通過display類呼叫方法實現裝飾功能
@override
public int getcolumns()
@override
public int getrows()
@override
public string getrowtext(int row)
}
fullborder類
具體的裝飾類。
package decorator;
//裝飾類的具體類
public class fullborder extends border
//通過display類呼叫方法實現裝飾功能
在decorator模式中,裝飾邊框和被裝飾物具有一致性,這樣,即使被裝飾物被邊框裝飾起來了,介面也不會被隱藏起來,其他類仍然可以呼叫其中的方法,這就是介面的透明性。
decorator模式中用到了委託,它讓類之間形成了弱關聯關係,因此,不用改變框架**,就可以生成乙個與其他物件具有不同關係的物件。
練習
package decorator;
public class updownborder extends border
@override
public int getcolumns()
@override
public int getrows()
@override
public string getrowtext(int row) else if(row==display.getrows()+1)else
} private string makeline(char borderchar2, int columns)
for(int row=0;row0)}}
}
設計模式 設計模式
物件導向程式設計 oop 的基本概念有 封裝,抽象,繼承,多型等,如何開發出可復用的物件導向軟體一直困擾著軟體開發人員。可復用的物件導向技術包括類的繼承,物件的組合和引數化型別 generic gof的巨著 設計模式 總結出可復用的物件導向的23個設計模式,並且歸類成 建立型模式,結構型模式和行為型...
設計模式 命令設計模式
一句話總結 命令設計模式的實質是將命令定義,命令的執行分離開,從而提公升了系統的解藕性 結構 命令的抽象command 命令的具體實現concretecommand 命令處理者抽象ireceiver 命令處理者的具體實現concretereceiver 命令的呼叫者invoker 客戶端client...
設計模式 9 設計模式
文章 head first 第一章 head first 設計模式讀書筆記 1 策略模式 觀察者模式 head first設計模式學習2 裝飾者模式 head first 設計模式3 工廠模式 head first設計模式4 命令模式 head first 設計模式5 介面卡模式和外觀模式 head...