裝飾模式 對新房進行裝修並沒有改變房屋的本質,但它可以讓房子變得更漂亮、更溫馨、更實用。 在軟體設計中,對已有物件(新房)的功能進行擴充套件(裝修)。 把通用功能封裝在裝飾器中,用到的地方進行呼叫。 裝飾模式是一種用於替代繼承的技術,使用物件之間的關聯關係取代類之間的繼承關係。引入裝飾類,擴充新功能。 角色 抽象構件 具體構件 抽象裝飾類 具體裝飾類案例一,窗體裝飾
1.元件類
package decorator;
// 裝飾者模式
/*** created by jiqing on 2016/10/13.
*/abstract
class
component
2.元件裝飾者
package decorator;
/*** created by jiqing on 2016/10/13.
*/public
class
componentdecorator
extends
component
public
void
display
()}
3.繼承類listbox
package decorator;
/*** created by jiqing on 2016/10/13.
*/public
class
listbox
extends
component
}
4.繼承類textbox
package decorator;
/*** created by jiqing on 2016/10/13.
*/public
class
textbox
extends
component
}
5.繼承類window
package decorator;
/*** created by jiqing on 2016/10/13.
*/public
class
window
extends
component
}
6.黑框裝飾者
package decorator;
/*** created by jiqing on 2016/10/14.
*/public
class
blackboarderdecorator
extends
componentdecorator
public
void
display
() public
void
setblackboarder
()}
7.滾動條裝飾者
package decorator;
/*** created by jiqing on 2016/10/14.
*/public
class
scrollbardecorator
extends
componentdecorator
public
void
display
() public
void
setscrollbar
()}
8.客戶端呼叫
package decorator;
// 裝飾者模式
/*** created by jiqing on 2016/10/14.
*/public
class
client
}
執行結果
為構件增加滾動條!
顯示窗體!
--------------------
為構件增加黑色邊框!
為構件增加滾動條!
顯示窗體!
1.密文介面
package decorator.sample2;
/*** created by jiqing on 2016/10/14.
*/public
inte***ce
cipher
// 密文介面
2.密文裝飾者
package decorator.sample2;
/*** created by jiqing on 2016/10/14.
*/public
class
cipherdecorator
implements
cipher
public
string
encrypt
(string plaintext)
}
3.密文介面實現類
package decorator.sample2;
/*** created by jiqing on 2016/10/14.
*/public
final
class
******cipher
implements
cipher
// 簡單密文繼承密文
if(c>='a'&&c<='z')
str+=c;
}return
str;}}
4.複雜加密裝飾者
package decorator.sample2;
/*** created by jiqing on 2016/10/14.
*/public
class
complexcipher
extends
cipherdecorator
// 複雜密文
public
string
encrypt
(string plaintext)
public
string
reverse
(string text)
return
str;}}
5.先進加密裝飾者
package decorator.sample2;
/*** created by jiqing on 2016/10/14.
*/public
class
advancedcipher
extends
cipherdecorator
public
string
encrypt
(string plaintext)
public
string
mod(string text)
return
str;}}
6.客戶端
package decorator.sample2;
/*** created by jiqing on 2016/10/14.
*/public
class
client
}
執行結果
java設計模式之裝飾者模式
裝飾者模式 動態的將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。類圖 barbecue類 實現 package com.decorator public abstract class barbecue public abstract double cost fish類 ...
Java設計模式之裝飾者模式
設想乙個情景,假設有一家奶茶店,店裡面只賣飲料,不賣其他的東西,且飲料的品種只有兩種分別為coffee和milk,那麼為這家店的訂單系統可以簡單的設計為兩個類,coffee類和milk類。如果有一天,店裡面賣的飲料品種增加了很多種,這個時候我們可以發現飲料種類很多,但是每一類都可以抽象出類似的屬性和...
Java設計模式之裝飾者模式
裝飾者模式在保持原有結構不變的情況下,新建類 新增功能 去包裝原有的類。1.實體抽象類 public inte ce drink 2.具體例項實現 public class coffee implements drink override public string getdescription 3...