如何定义代理模式?

时间:2013-08-08 01:04:59

标签: c# defined proxy-pattern

根据我的理解,当我在另一个类型中引用另一个类型作为我的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
        {
            .
            .
            .
        }
    }
}

另外,如果我的描述是正确的,是否会使任何具有任何类型成员的类进入代理模式类?

1 个答案:

答案 0 :(得分:3)

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

如果ListUsers实施了IList<User>接口,它将成为List<User>的代理。同样,如果ListUsers允许您获得User的特殊子类,它允许您读取数据但不能写入数据,那么该特殊类将成为User的代理。

.NET在几个值得注意的地方使用代理模式,例如通过List<T>.AsReadOnly管理列表访问,或SynchronizedHashTable的{​​{1}}包装。