我發現自己越來越頻繁地使用以下設計,而我的直覺說這是一種代理類型,因爲我沒有真正添加太多功能。我懷疑它的唯一原因是因爲代碼更像是我看到的裝飾器例子!這是一個代理模式或裝飾模式的例子
您認爲如何?
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public virtual string Address { get; set; }
}
class PersonProxyOrDecarator : Person
{
private Lazy<string> _address;
public PersonProxyOrDecarator(PersonRepository repository)
{
_address = new Lazy<string>(()=> repository.LoadAddress(this));
}
public override string Address
{
get
{
return _address.Value;
}
set { throw new NotImplementedException(); }
}
}
class PersonRepository
{
public IEnumerable<Person> LoadPeople()
{
return new List<Person>(){
new PersonProxyOrDecarator(this){ Name="Test",Age=18 }
};
}
public string LoadAddress(Person person)
{
return "Address loaded from webservice";
}
}
這不是問題而是人的實體類通常會坐在不同的組件(域組件),以及personproxyordecorator類和庫會坐在一個集儲存庫。
感謝
羅斯
對我來說,這是一個代理。爲了成爲一個裝飾者,我希望它會爲'LoadAddress'方法添加和/或改變功能,而你的實現只會延遲實際檢索作爲典型代理屬性的地址。 –