設計模式結構型之裝飾器模式
阿新 • • 發佈:2020-08-24
學習裝飾器模式,我們就該知道什麼叫做裝飾,就是對一個主體單位進行修飾,拿現實生活中的房子舉例,開發商把房子交給客戶之後,客戶要對房子按照自己的風格進行裝修。
下面我們用程式程式碼來描述,我們可以建立兩種房子住房(House)和公寓(Falts),讓他們繼承父類(Bulding)。程式碼如下:
/// <summary> /// 房子父類 /// </summary> public abstract class Buliding { public string Name { get;set; } public abstract void Print(); }
/// <summary> /// 住房類 /// </summary> public class House : Buliding { public override void Print() { Console.WriteLine("住房已修建完成"); } }
/// <summary> /// 公寓類 /// </summary>public class Flats : Buliding { public override void Print() { Console.WriteLine("公寓已修建完成"); } }
執行一下,看一下結果:
class Program { static void Main(string[] args) { //建立一個住房 Buliding house = new House(); house.Print();//建立一個公寓 Buliding falts = new Flats(); falts.Print(); } }
房子已經完成,接下來就該裝修了。我們來建立幾個裝飾類.
/// <summary> /// 裝飾基類 /// </summary> public abstract class BaseDecorator : Buliding { public abstract override void Print(); } /// <summary> /// 水電改造 /// </summary> public class WaterDianDecorator : BaseDecorator { private readonly Buliding _buliding = null; public WaterDianDecorator(Buliding buliding) { _buliding = buliding; } public override void Print() { _buliding.Print(); Console.WriteLine("完成了水電改造"); } } /// <summary> /// 牆面粉刷 /// </summary> public class BrushWallDecorator : BaseDecorator { private readonly Buliding _buliding = null; public BrushWallDecorator(Buliding buliding) { _buliding = buliding; } public override void Print() { _buliding.Print(); Console.WriteLine("完成了牆面粉刷"); } }
執行一下看一下結果。
{ //建立一個住房 Buliding house = new House(); //水電改造 house=new WaterDianDecorator(house); //牆面粉刷 house = new BrushWallDecorator(house); house.Print(); ////建立一個公寓 //Buliding falts = new Flats(); //falts.Print(); }
對於house這個類來說,就像是穿了一層外衣一樣,我們可以不斷的新增新的功能,也可以改變他們的執行順序,很靈活。