结构型设计模式——代理模式

为其他对象提供一种代理以控制对这个对象的访问。通过引入代理对象作为中介,控制对目标对象的访问。其核心思想是解耦客户端与真实对象的直接交互,并支持在访问前后扩展功能(如权限控制、日志记录等)。

适用于

代理模式适用于在需要比较通用和复杂的对象指针代替简单的指针的时候,常见情况有:

①远程代理,为一个对象在不同地址空间提供局部代表。

②虚代理,根据需要创建开销很大的对象。

③保护代理,控制对原始对象的访问,用于对象应该有不同的访问权限的时候。

④智能引用,取代了简单的指针,它在访问对象时执行一些附加操作。

典型用途包括:对指向实际对象的引用计数,这样当该对象没有引用时,可以被自动释放;当第一次引用一个持久对象时,将它装入内存;在访问一个实际对象前,检查是否已经锁定了它,以确保其他对象不能改变它。

类图如下

 1     internal class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             //创建代理对象
 6             ProxyPoint proxyPoint = new ProxyPoint();
 7             //调用方法卖票
 8             proxyPoint.Sell();
 9         }
10     }
1     /// <summary>
2     /// 抽象主题接口
3     /// 实现火车站卖票,和代理点卖票
4     /// </summary>
5     internal interface SellTickets
6     {
7         //卖票
8         public void Sell();
9     }
View Code
 1     /// <summary>
 2     /// 具体主题对象,含有具体操作的对象,使用代理类为它服务
 3     /// </summary>
 4     internal class TrainStation : SellTickets
 5     {
 6         public void Sell()
 7         {
 8             Console.WriteLine("购买火车票");
 9         }
10     }
View Code
 1     /// <summary>
 2     /// 代理点卖票
 3     /// </summary>
 4     internal class ProxyPoint : SellTickets
 5     {
 6         private TrainStation trainStation = new TrainStation();
 7         public void Sell()
 8         {
 9             //卖票前可以做一些事情:例如余票查询
10             trainStation.Sell();
11             //买票后可以做一些事情:例如收取服务费
12         }
13     }
View Code
posted @ 2025-04-16 21:38  是铭不是明  阅读(12)  评论(0)    收藏  举报