2.靜態AOP實現-裝飾器模式

通過裝飾器模式實現在RegUser()方法本身業務前後加上一些自己的功能,如:BeforeProceed和AfterProceed,即不修改UserProcessor類又能增加新功能

  1. 定義1個用戶接口,裏面有個註冊用戶方法
    public interface IUserProcessor
    {
                void RegUser(User user);
    }
  2. 實現用戶這個接口
    public class UserProcessor : IUserProcessor
    {
                public void RegUser(User user)
                {
                    Console.WriteLine("用戶已註冊。Name:{0},PassWord:{1}", user.Name, user.Password);
                }
    }
  3. 裝飾器的模式去提供一個AOP功能

    /// <summary>
    /// 裝飾器的模式去提供一個AOP功能,既有繼承,又有組合
    /// </summary>
    public class UserProcessorDecorator : IUserProcessor//繼承
    {
                private IUserProcessor _UserProcessor { get; set; }//組合
                public UserProcessorDecorator(IUserProcessor userprocessor)//通過構造函數的傳入
                {
                    this._UserProcessor = userprocessor;
                }
    
                public void RegUser(User user)
                {
                    BeforeProceed(user);//在本身業務之前加入一些邏輯
                    this._UserProcessor.RegUser(user);//調用構造函數傳入的對象執行本身的業務邏輯
                    AfterProceed(user);//在本身業務之後加入一些邏輯
                }
    
                /// <summary>
                /// 業務邏輯之前
                /// </summary>
                /// <param name="user"></param>
                private void BeforeProceed(User user)
                {
                    Console.WriteLine("方法執行前");
                }
    
                /// <summary>
                /// 業務邏輯之後
                /// </summary>
                /// <param name="user"></param>
                private void AfterProceed(User user)
                {
                    Console.WriteLine("方法執行後");
                }
    }

     

  4. 調用
    public static void Show()
    {
                User user = new User()
                {
                    Name = "Eleven",
                    Password = "123123123123"
                };
                IUserProcessor processor = new UserProcessor();
                processor.RegUser(user);
                Console.WriteLine("***************");
    
                processor = new UserProcessorDecorator(processor);//即不修改UserProcessor類又能增加新功能
                processor.RegUser(user);
    }

     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章