經過代理模式實如今RegUser()方法自己業務先後加上一些本身的功能,如:BeforeProceed和AfterProceed,即不修改UserProcessor類又能增長新功能函數
public interface IUserProcessor { void RegUser(User user); }
實現用戶這個接口this
public class UserProcessor : IUserProcessor { public void RegUser(User user) { Console.WriteLine("用戶已註冊。Name:{0},PassWord:{1}", user.Name, user.Password); } }
/// <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("方法執行後"); } }
調用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); }
總結:
裝飾器模式和代理模式很像
代理模式是內置一個對象,裝飾器模式是經過構造函數傳入了一個對象
側重點不一樣,裝飾器模式能夠層層裝飾代理