你能解释一下Proxy和Decorator之间的区别吗?
我看到的主要区别在于,当我们假设Proxy使用合成而Decorator使用聚合时,似乎很清楚通过使用多个(一个或多个)装饰器,您可以修改/添加功能到预先存在的实例(装饰),而代理有自己的代理类的内部实例,并委托给它添加一些额外的功能(代理行为).
是个问题-是否代理与聚集创造仍然是代理还是相当装饰?是否允许(通过GoF模式中的定义)创建具有聚合的代理?
我觉得我一直在使用这些模式系列很多次,但是,对我来说很难看出差异,因为它们的定义非常相似.基本上似乎所有这些都是关于包装另一个或多个对象来扩展或用额外的东西包装他们的行为.
对于快速示例,在存储库模式上实现缓存机制似乎就是这种情况.这是一个C#我可能会开始的快速示例代码.
public interface IRepository {
IEnumerable<T> GetItems<T>();
}
public class EntityFrameworkRepository : IRepository {
...
}
public class CachedRepository : IRepository {
private IRepository _repository;
private ICacheProvider _cache;
public CachedRepository(IRepository repository, ICacheProvider cache) {
this._repository = repository;
this._cache = cache;
}
public IEnumerable<T> GetItems<T>() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
例如,这些模式中的哪一种适用于这种情况?任何人都可以简要地澄清理论和实践上的差异吗?