3.靜態AOP實現-代理模式

經過代理模式實如今RegUser()方法自己業務先後加上一些本身的功能,如:BeforeProceed和AfterProceed,即不修改UserProcessor類又能增長新功能函數

  1. 定義1個用戶接口,裏面有個註冊用戶方法
    public interface IUserProcessor
    {
                void RegUser(User user);
    }

     

  2. 實現用戶這個接口this

    public class UserProcessor : IUserProcessor
    {
                public void RegUser(User user)
                {
                    Console.WriteLine("用戶已註冊。Name:{0},PassWord:{1}", user.Name, user.Password);
                }
    }

     

  3. 代理模式去提供一個AOP功能
    /// <summary>
    /// 代理模式去提供一個AOP功能,既有繼承,又有new對象
    /// </summary>
    public class ProxyUserProcessor: IUserProcessor//繼承
    {
                private IUserProcessor _UserProcessor = new UserProcessor();//new對象
        
                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. 調用spa

    public static void Show()
    {
                User user = new User()
                {
                    Name = "Eleven",
                    Password = "123123123123"
                };
                IUserProcessor processor = new UserProcessor();
                processor.RegUser(user);
                Console.WriteLine("***************");
    
               processor = new ProxyUserProcessor();
               processor.RegUser(user);
    }

    總結:
    裝飾器模式和代理模式很像
    代理模式是內置一個對象,裝飾器模式是經過構造函數傳入了一個對象
    側重點不一樣,裝飾器模式能夠層層裝飾代理

相關文章
相關標籤/搜索