[用設計模式鍛鍊C#系列]之Decorator (轉)
名稱:Decorator
中文名稱:裝飾
型別:結構型
簡介:我想當你真正的理解此時,
你可能會像侯sir那樣,擊節而歌.
暗歎精妙.好瀟灑的連環.當然這裡的
精妙主要在語言的實現上.
一般此模式,用於動態的給一個新增
職責.向其它很多模式一樣,替代"純粹"的
繼承物件體系的設計.注意這裡強調"純粹"
也可說成是"靜態".因為decorator的實現
很依賴繼承的特性.但它對於職責的新增是
動態的,而不是透過預先設計大量的要求對
象,以便需求.它架構物件的指導理念
是透過小物件逐步"疊加"("作用")構成最終
需求的大物件.
[]
宣告:這裡由於重在C#的鍛鍊.所以事例中不採用
涉及連環,緊以簡單類示:
// created on -3-18 at 20:
//Environment Tool : shdevelop ....
// Member : component concretecomponent decorator condecorator
using System;
abstract class Component
{
public abstract void Draw();
}
class ConcreteComponent : Component
{
private string m_STR;
public ConcreteComponent(string m_STRinparam)
{
m_STR = m_STRinparam;
}
public overr void Draw()
{
Console.WriteLine
("I am concretecomponent.......n{0} ", m_STR);
}
}
class Decorator : Component
{
protected Component decoratoredobject;
public void SetComponent(Component m_OBJinparam)
{
decoratoredobject = m_OBJinparam ;
}
public override void Draw()
{
if (decoratoredobject != null)
decoratoredobject.Draw();
}
}
class ConcreteDecorator : Decorator
{
private string strDecoratorName;
public ConcreteDecorator (string m_STRinparam)
{
strDecoratorName = m_STRinparam;
}
public override void Draw()
{
CustomDecoration();
base.Draw();
}
void CustomDecoration()
{
Console.WriteLine("In concretedecorator..........");
Console.WriteLine("{0}", strDecoratorName);
}
}
public class DesignPattern_Decorator_Test
{
public static void Main(string[] args)
{
ConcreteComponent m_DECobj1 =
new ConcreteComponent("I am the component which will be decorated........n");
ConcreteDecorator m_DECobj2 =
new ConcreteDecorator("I will decorate the component..........");
m_DECobj2.SetComponent(m_DECobj1);
Component result = m_DECobj2;
result.Draw();
}
}
點評:1.這裡的abstract也是C#對抽象類的原生支援.
這裡是不可使用interface的,因為需要"多重"的過載.
2.在concretedecorator單一的情況下可以將decorator併入concretedecorator.
2.小物件逐步構件大物件,很多情況下,適宜採用strategy.
譬如component定義的介面太臃腫,那麼concretedecorator的
負擔會太重.而採用小物件strategy,逐步實現大物件,負擔
不會很重,而且strategy的優點亦可產生作用:透過小物件介面
實現decorator多樣化.
---------------------------------------------------------------------
宣告:本程式重在演示C#基本用法
不考慮在實際環境中應用帶來
其它問題的情況.
如:多執行緒.
系列文章宣告請見第一篇:
[用設計模式鍛鍊C#基本功系列]之Singleton、Bridge
---------------------------------------------------------------------
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992975/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [用設計模式鍛鍊C#系列]之Strategy (轉)設計模式C#
- [用設計模式鍛鍊C#系列]之Builder (轉)設計模式C#UI
- [用設計模式鍛鍊C#系列]之Singleton、Bridge (轉)設計模式C#
- C#設計模式系列:裝飾模式(Decorator)C#設計模式
- 轉載-Java設計模式之DecoratorJava設計模式
- C#設計模式-裝飾器模式(Decorator Pattern)C#設計模式
- 設計模式之Decorator在餐館中的應用設計模式
- 設計模式之裝飾器模式(decorator pattern)設計模式
- PHP設計模式之裝飾器模式(Decorator)PHP設計模式
- JAVA設計模式之 裝飾模式【Decorator Pattern】Java設計模式
- 18 個鍛鍊程式設計技能的網站程式設計網站
- Java設計模式之裝飾者模式(Decorator pattern)Java設計模式
- 程式設計師工作之餘應該注意鍛鍊自己的身體程式設計師
- Decorator裝飾設計模式設計模式
- 設計模式--裝飾模式(Decorator Pattern)設計模式
- 設計模式-裝飾模式(Decorator Pattern)設計模式
- 設計模式 (十)裝飾模式(Decorator)設計模式
- Net設計模式例項之裝飾者模式(Decorator Pattern)設計模式
- C#設計模式系列:代理模式(Proxy)C#設計模式
- PHP設計模式- Decorator 裝飾器模式PHP設計模式
- java設計模式-裝飾器模式(Decorator)Java設計模式
- python: 設計模式(design pattern)之修飾器模式(decorator)Python設計模式
- C#設計模式之命令模式C#設計模式
- 設計模式系列之「策略模式」設計模式
- 設計模式系列之「代理模式」設計模式
- C#設計模式系列:命令模式(Command)C#設計模式
- C#設計模式系列:狀態模式(State)C#設計模式
- C#設計模式系列:原型模式(Prototype)C#設計模式原型
- C#設計模式系列:建造者模式(Builder)C#設計模式UI
- C#設計模式系列:觀察者模式(Observer)C#設計模式Server
- C#設計模式系列:迭代器模式(Iterator)C#設計模式
- C++ 設計模式 裝飾模式(Decorator Pattern)C++設計模式
- C#設計模式之單例模式C#設計模式單例
- C#設計模式之狀態模式C#設計模式
- C#設計模式之享元模式C#設計模式
- C#設計模式之組合模式C#設計模式
- C#設計模式之迭代器模式C#設計模式
- C#設計模式之代理模式(四)C#設計模式