我有點像瘋子,一個人開了一天酒店,來寫這個。我發現我寫這個系列,閱讀的人很少。也許是程式員不重視思想的東西,也許是感覺我寫的很Low,無所謂,我只想告訴同行,程式員重在編程思想,有了編程思想技術的路才能走的更長更遠。我很孤獨,在自己的小世界里存活著。但是我也要耐著孤獨,向更好的方向發展需要孤獨,孤獨 ...
我有點像瘋子,一個人開了一天酒店,來寫這個。我發現我寫這個系列,閱讀的人很少。也許是程式員不重視思想的東西,也許是感覺我寫的很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不惑一樣,需要有自己的一套處事理論。