代理模式是如何定义的

本文关键字:定义 何定义 模式 代理 | 更新日期: 2023-09-27 18:26:44

根据我的理解,当我在proxy类中作为成员持有对另一个类型的引用时,我实现了代理模式。我还需要提供一个与主题类型相同的接口,并控制对真实对象的访问。

所以,如果我的代码是这样的,当List成员是主题类型时,我会正确地实现代理模式吗?

public class ListUsers
{
    public List<User> UserList { get; set; }
    .
    .
    // Ctor and other methods that dont expose the "List<Users>" properties..
    .
    .
    public void Add(User i_User)
    {
        // added logic and control.
        if (!this.UserList.Exists(x => x.Id == i_User.Id))
        {
            this.UserList.Add(i_User);
            this.SetUserPassword();
        }
        else
        {
            .
            .
            .
        }
    }
}

此外,如果我的描述是正确的,这会使任何具有任何类型成员的类成为代理模式类吗??

代理模式是如何定义的

不,这不是代理模式的有效实现,因为该模式实现的关键功能缺失:对象的代理需要通过提供相同的接口或向被代理对象提供隐式转换来假装它是被代理的对象。

如果ListUsers实现了IList<User>接口,它将是List<User>的代理。类似地,如果ListUsers允许您获得User的一个特殊子类,该子类允许您读取数据而不写入数据,那么该特殊类将是User的代理。

.NET在一些值得注意的地方使用了代理模式,例如通过List<T>.AsReadOnly管理列表访问,或者使用HashTableArrayListSynchronized包装器。