根据我的理解,当我在另一个类型中引用另一个类型作为我的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
{
.
.
.
}
}
}
另外,如果我的描述是正确的,是否会使任何具有任何类型成员的类进入代理模式类?
答案 0 :(得分:3)
不,这不是代理模式的有效实现,因为缺少该模式实现的关键特性:对象的代理需要通过提供相同的接口来假装它是代理的东西,或者通过向代理对象提供隐式转换。
如果ListUsers
实施了IList<User>
接口,它将成为List<User>
的代理。同样,如果ListUsers
允许您获得User
的特殊子类,它允许您读取数据但不能写入数据,那么该特殊类将成为User
的代理。
.NET在几个值得注意的地方使用代理模式,例如通过List<T>.AsReadOnly
管理列表访问,或Synchronized
和HashTable
的{{1}}包装。