稍微变化一下!注意区别。
Program.cs
class Program { static void Main(string[] args) { User user = " }; var processor = TransparentProxy.Create(new UserProcessor()); processor.Shopping(user); Console.ReadLine(); } }
User.cs
public class User { public string Name { get; set; } public string Password { get; set; } }
IUserProcessor.cs
public interface IUserProcessor { void Shopping(User user); }
UserProcessor.cs
public class UserProcessor : IUserProcessor { public void Shopping(User user) { Console.WriteLine("买呀,买呀,买桃子!"); } }
UserProxyProcessor.cs
class UserProxyProcessor<T> : RealProxy { private T processor; public UserProxyProcessor(T processor) : base(typeof(T))//不能丢 { this.processor = processor; } public override IMessage Invoke(IMessage msg) { PreShopping(); IMethodCallMessage message = (IMethodCallMessage)msg; object result = message.MethodBase.Invoke(processor, message.Args); PostShopping(); ], , null, message); } private void PreShopping() { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("买东西前,判断是否注册了!"); Console.ResetColor(); } private void PostShopping() { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("买完东西后,写个日志文件!"); Console.ResetColor(); } }
TransparentProxy.cs
public static class TransparentProxy { public static IUserProcessor Create(IUserProcessor obj) { var processor = new UserProxyProcessor<IUserProcessor>(obj); IUserProcessor transparentProxy = (IUserProcessor)processor.GetTransparentProxy(); return transparentProxy; } }