1. 程式人生 > 實用技巧 >初識設計模式-結構型之裝飾器

初識設計模式-結構型之裝飾器

裝飾器模式是通過組合加繼承的方式,動態的為業務類新增功能的一種設計模式,在這種設計模式之下,只需要新增一個新的裝飾器,即可為業務類新增一個新的功能,首先對裝飾器進行一次抽象,相比於單單組合的方式,這樣可以減少程式碼複雜程度

我們以炒菜為場景,現在我們沒有洗菜和裝盤的情景,直接上手做菜

public abstract class AbstractDecorator
    {
        public string FoodName;
        public string FoodTool;
        public abstract void MakeFood();
    }
  
public class Food : AbstractDecorator { public override void MakeFood() { Console.WriteLine("正在炒菜中,稍後就出爐了。。。"); } } public class BaseDecorator : AbstractDecorator { private AbstractDecorator _abstractDecorator = null; public BaseDecorator(AbstractDecorator @abstract) { _abstractDecorator
= @abstract; } public override void MakeFood() { _abstractDecorator.MakeFood(); } } public class FoodDecorator : BaseDecorator { public FoodDecorator(AbstractDecorator @abstract):base(@abstract) { } public override
void MakeFood() { // Befor(); base.MakeFood();//此處前後擴充套件方法 //After(); } /// <summary> /// 擴充套件的功能 /// </summary> public void Befor() { Console.WriteLine("做菜前的洗菜"); } /// <summary> /// 擴充套件的功能 /// </summary> public void After() { Console.WriteLine("做完後裝盤"); } } #region 裝飾器模式 AbstractDecorator food = new Food(); food = new FoodDecorator(food); food.MakeFood(); #endregion

我們在food裝飾器中加了額外的一層邏輯,做到了不修改原有的封裝,增加擴充套件功能。這也是一種AOP的實現思路,在方法的前後增加東西。

優點:靈活,擴充套件性好,能夠在不影響業務類的前提下,動態的為其新增本身不存在的功能

缺點:為了靈活擴充套件增加了中間層,也帶來維護的複雜度