1. 程式人生 > >設計模式漫談之裝飾模式

設計模式漫談之裝飾模式

代碼 on() {0} pro OS new t 添加 con 多個

我有點像瘋子,一個人開了一天酒店,來寫這個。我發現我寫這個系列,閱讀的人很少。也許是程序員不重視思想的東西,也許是感覺我寫的很Low,無所謂,我只想告訴同行,程序員重在編程思想,有了編程思想技術的路才能走的更長更遠。我很孤獨,在自己的小世界裏存活著。但是我也要耐著孤獨,向更好的方向發展需要孤獨,孤獨也是一種享受生命的過程。

給一個方法拓展功能,像面向結構中,一個方法裏調用多個方法。在面向對象設計中可以是調用基類的方法,子類重寫的時候增加功能。再次說下語言層面的東西,類,抽象類,接口的關系,是一種具體到概況的過程。類是具體的,抽象類是中間狀態,接口是概況的。

裝飾模式就是給方法添加功能的。但是走的是面向對象的模式,也是方法堆棧調用的模式。一個對象中有其他對象的引用,那麽這個對象是可以訪問其他對象的。

直接上例子我來解釋:

//一個基本對象,像個裸體的人。

class Person
{

//默認構造函數
public Person()
{ }

private string name;

//給數據賦值的構造函數
public Person(string name)
{
this.name = name;
}

//方法的基本功能(可以重寫)

public virtual void Show()
{
Console.WriteLine("裝扮的{0}", name);
}
}

//裝飾對象

class Finery : Person
{

//被裝飾對象的引用
protected Person component;


public void Decorate(Person component)
{
this.component = component;
}

//重寫的方法

public override void Show()
{
if (component != null)
{
component.Show();
}
}
}

//具體的裝飾對象

class TShirts : Finery
{
public override void Show()
{
Console.Write("大T恤 ");

//調用其他裝飾對象的方法

base.Show();
}
}

//具體的裝飾對象

class BigTrouser : Finery
{
public override void Show()
{
Console.Write("垮褲 ");
base.Show();
}
}

//具體的裝飾對象

class Sneakers : Finery
{
public override void Show()
{
Console.Write("破球鞋 ");
base.Show();
}
}

//被裝飾的對象

Person xc = new Person("小菜");

Console.WriteLine("\n第一種裝扮:");

//裝飾對象

Sneakers pqx = new Sneakers();
BigTrouser kk = new BigTrouser();
TShirts dtx = new TShirts();

//一層一層的裝飾

pqx.Decorate(xc);
kk.Decorate(pqx);
dtx.Decorate(kk);

//一層一層的拆裝飾
dtx.Show();

總結:裝飾模式從代碼上看就是一種對方法的擴展。從意思上看是用不同的對象來裝飾。存了對象的引用就是存了對象的全部。還是那句話,編程是靠思想的,工作幾年後,一定要形成自己的編程思想,自己的一套理論。如同人到40不惑一樣,需要有自己的一套處事理論。

設計模式漫談之裝飾模式