通過裝飾器模式實現在RegUser()方法本身業務前後加上一些自己的功能,如:BeforeProceed和AfterProceed,即不修改UserProcessor類又能增加新功能
- 定義1個用戶接口,裏面有個註冊用戶方法
public interface IUserProcessor { void RegUser(User user); }
- 實現用戶這個接口
public class UserProcessor : IUserProcessor { public void RegUser(User user) { Console.WriteLine("用戶已註冊。Name:{0},PassWord:{1}", user.Name, user.Password); } }
-
裝飾器的模式去提供一個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("方法執行後"); } }
- 調用
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); }