設計模式(Java) Decorator模式

2021-08-28 06:22:55 字數 2398 閱讀 3515

可以不斷地為物件新增裝飾的設計模式被稱為decorator模式。

示例程式

為文字新增裝飾邊框

display類

該類是可以顯示多行字串的抽象類。

package decorator;

//被裝飾物與裝飾物的抽象父類,這樣保持了兩者之間的一致性,在show方法中使用getrows方法和getrowtext方法這裡使用的是模板方法

//在抽象類中的方法實現中使用抽象方法,這種設計模式是模板模式

public abstract class display

@override

public int getcolumns()

@override

public int getrows()

@override

public string getrowtext(int row) else

}}

它繼承了display類,實現了display類中的抽象方法。stringdisplay類的例項相當於與沒有被裝飾物修飾過的原生物體。

border類

該類是裝飾邊框的抽象類。

package decorator;

//裝飾類的抽象類,與實體類一樣繼承父類,達到裝飾物與被裝飾物的一致性,從而形成遞迴形式

public abstract class border extends display

}

通過繼承,裝飾邊框和被裝飾物具有了相同的方法,即意味著他們具有了一致性。

sideborder類

該類是一種具體的裝飾類。

package decorator;

//裝飾類的具體類

public class sideborder extends border

//通過display類呼叫方法實現裝飾功能

@override

public int getcolumns()

@override

public int getrows()

@override

public string getrowtext(int row)

}

它是border類的子類,該類是用指定的字元裝飾字串兩側的類。

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...