(一)代理模式的意义
(1)控制被访问对象的访问
(2)简化被访问对象的访问
(3)实现AOP(AOP:面向切面编程)
(4)添加非业务相关的代码,比如添加日志等等
(二)代理模式组成
(1)主题类:定义主题相关功能的接口
(2)具体主题类:实现主题类中定义的功能
(3)代理类:控制对具体主题类的访问
代码案例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace testAopByDecorator
{
class Program
{
/// <summary>
/// 业务模型
/// </summary>
public class User
{
/// <summary>
/// 编号:Id
/// </summary>
public string Id { get; set; }
/// <summary>
/// 姓名:Name
/// </summary>
public string Name { get; set; }
/// <summary>
/// 性别:Sex
/// </summary>
public string Sex { get; set; }
/// <summary>
/// 联系电话:Phone
/// </summary>
public int Phone { get; set; }
}
/// <summary>
/// 接口设计
/// </summary>
public interface IUserProcessor
{
void RegisterUser(User user);
}
/// <summary>
/// 业务实现
/// </summary>
public class UserProcessor : IUserProcessor
{
public void RegisterUser(User user)
{
if (user == null)
{
return;
}
Console.WriteLine("注册了一个新的用户");
Console.WriteLine("编号:{0}",user.Id);
Console.WriteLine("姓名:{0}",user.Name);
Console.WriteLine("性别:{0}",user.Sex);
Console.WriteLine("联系电话:{0}",user.Phone);
}
}
/// <summary>
/// 上层调用
/// </summary>
private static User user = new User { Id = 1,Name = "张三",Sex = "男",Phone = 123456};
static void Main(string[] args)
{
Register();
Console.ReadKey();
}
private static void Register()
{
IUserProcessor processor = new UserProcessor();
processor.RegisterUser(user);
}
}
}
总结:代理模式(Proxy Pattern)对其他对象提供一种代理以控制对这个对象的访问。代理模式分为远程代理、虚拟代理、安全代理和智能指引