标签:构造 通过 接口 原来 ace ons 的区别 lse prepare
1.行为型设计模式:关注类与类之间的关系
代理模式:通过代理类来访问业务类,在不修改业务类的前提下可以扩展功能;
业务接口
1 /// <summary> 2 /// 业务接口 3 /// </summary> 4 public interface ISubject 5 { 6 /// <summary> 7 /// get 8 /// </summary> 9 /// <returns></returns> 10 bool GetSomething(); 11 12 /// <summary> 13 /// do 14 /// </summary> 15 void DoSomething(); 16 }
实现
1 /// <summary> 2 /// 一个耗时耗资源的对象方法 3 /// 一个第三方封装的类和方法 4 /// </summary> 5 public class RealSubject : ISubject 6 { 7 public RealSubject() 8 { 9 Thread.Sleep(2000); 10 long lResult = 0; 11 for (int i = 0; i < 100000000; i++) 12 { 13 lResult += i; 14 } 15 Console.WriteLine("RealSubject被构造。。。"); 16 } 17 18 /// <summary> 19 /// 火车站查询火车票 20 /// </summary> 21 public bool GetSomething() 22 { 23 //Console.WriteLine("prepare GetSomething"); 24 Console.WriteLine("坐车去火车站看看余票信息。。。"); 25 Thread.Sleep(3000); 26 Console.WriteLine("到火车站,看到是有票的"); 27 return true; 28 } 29 30 /// <summary> 31 /// 火车站买票 32 /// </summary> 33 public void DoSomething() 34 { 35 Console.WriteLine("开始排队。。。"); 36 Thread.Sleep(2000); 37 Console.WriteLine("终于买到票了。。。"); 38 } 39 }
调用
1 { 2 Console.WriteLine("***********Real**************"); 3 4 //ISubject subject = new RealSubject();//持有资源 /数据库链接 5 //subject.GetSomething(); 6 //subject.DoSomething(); 7 }
通过代理模式添加日志
1 /// <summary> 2 /// 代理:只能传达原有逻辑,不能新增业务逻辑 3 /// 包一层:没有什么技术问题是包一层不能解决的,如果有,就再包一层 4 /// 属于自己的地盘 领域 就是可以为所欲为 5 /// 日志 修改代理类完成 日志代理 避免对业务类修改 6 /// 单例 修改代理类完成 搞个static (并不是强制单例) 避免对业务类修改 7 /// 缓存 修改代理类完成 加个缓存逻辑 避免对业务类修改 8 /// 。。。。 9 /// 10 /// </summary> 11 public class ProxySubject : ISubject 12 { 13 /// <summary> 14 /// 15 /// </summary> 16 private static ISubject _iSubject = new RealSubject(); 17 18 private static Dictionary<string, bool> ProxySubjectDictionary = new Dictionary<string, bool>(); 19 20 /// <summary> 21 /// 火车站查询火车票 22 /// </summary> 23 public bool GetSomething() 24 { 25 Console.WriteLine("before GetSomething"); 26 bool _BooleanResult = false; 27 string key = "GetSomething"; 28 if (ProxySubjectDictionary.ContainsKey(key)) 29 { 30 _BooleanResult = ProxySubjectDictionary[key]; 31 } 32 else 33 { 34 _BooleanResult = _iSubject.GetSomething(); 35 ProxySubjectDictionary.Add(key, _BooleanResult); 36 } 37 Console.WriteLine("after GetSomething"); 38 return _BooleanResult; 39 } 40 41 /// <summary> 42 /// 火车站买票 43 /// </summary> 44 public void DoSomething() 45 { 46 Console.WriteLine("before DoSomething"); 47 _iSubject.DoSomething(); 48 Console.WriteLine("after DoSomething"); 49 } 50 }
调用
1 { 2 Console.WriteLine("***********Proxy**************"); 3 ISubject subject = new ProxySubject(); 4 5 subject.GetSomething(); 6 subject.DoSomething(); 7 }
代理模式和适配器模式的区别
两者的关注点不同,适配器关注把新的类也适配到原来的业务中,而代理模式关注不改变原来的业务,而去进行扩展
标签:构造 通过 接口 原来 ace ons 的区别 lse prepare
原文地址:https://www.cnblogs.com/Spinoza/p/11483978.html