1

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

所以,如果我的代码看起来像这样,当 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
        {
            .
            .
            .
        }
    }
}

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

4

1 回答 1

3

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

如果ListUsers实现IList<User>了接口,它将是List<User>. 同样,如果ListUsers让您获得一个特殊的子类,User它可以让您读取数据但不能写入数据,那么该特殊类将成为User.

.NET 在几个值得注意的地方使用代理模式,例如通过 管理列表访问,List<T>.AsReadOnly或.SynchronizedHashTableArrayList

于 2013-08-08T01:23:50.630 回答