最近在看设计模式这本书,其中学到了代理模式这一节感觉还是挺有用的,顺便记录下来,如果有补充欢迎大家在评论区补充。
首先,我们要明白代理模式的三种角色:
抽象角色:通过接口或抽象类声明真实角色实现的业务方法。
代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
我们可以用代理模式来考虑其中一个应用场景,假如要实现写log记录日志的功能,可能会定义一个公共的写入方法,然后在去调用这个方法,但是在某些情况下可能要定制一些特殊的写入方法或者格式,这个时候考虑到特殊场景不是去修改公共的写入方法(顾名思义,公共方法就是具有普遍性而供多处调用的,区别于定制特性的方法)而是定义一个代理类去实现接口/抽象类,在这里所说的定制特殊的写入方法就是上面说的代理角色的附加自己的操作。
写了一个简单的例子:
1 #region Proxy pattern 2 /// <summary> 3 /// 抽象角色:通过接口或抽象类声明真实角色实现的业务方法。 4 /// </summary> 5 public interface IService 6 { 7 void SendMsg(); 8 } 9 /// <summary> 10 /// 真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。 11 /// </summary> 12 public class SinaService : IService 13 { 14 public void SendMsg() 15 { 16 Console.WriteLine("Hello"); 17 } 18 } 19 /// <summary> 20 /// //代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。 21 /// </summary> 22 public class SinaServiceProxy 23 { 24 public IService service = null; 25 public SinaServiceProxy() 26 { 27 service = new SinaService(); 28 } 29 public void SendMsg() 30 { 31 Console.WriteLine("this is proxy "); 32 service.SendMsg(); 33 Console.WriteLine("end......."); 34 } 35 } 36 #endregion