我觉得我已经用这些模式家族很多次了,但是对于我来说,很难看出它们的区别,因为它们的 定义 很相似。基本上,所有这些模式都与将另一个对象或多个对象 包装 起来以扩展或 包装 其行为的额外内容有关。
举个例子,在 repo 模式上实现缓存机制似乎就是这种情况。下面是我可能会开始使用的快速示例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>() {
...
}
}
这种情况适用哪种模式?能否简要澄清理论和实践上的区别?