【发布时间】:2014-02-26 10:56:25
【问题描述】:
如许多示例中所述(例如http://en.wikipedia.org/wiki/Decorator_pattern#Java),抽象装饰器类只需要转发组件方法。
但在我的情况下,我需要重写抽象类中的一个方法(用于类型转换):
组件
public interface PagerRepository<T> {
List<T> getPageEntries();
}
混凝土构件
public abstract class ConcretePagerRepository<T> implements PagerRepository<T> {
// @Override ...
}
抽象装饰器
public abstract class PagerRepositoryConvertionDecorator<T, S>
implements PagerRepository<S> {
protected PagerRepository<T> repo;
public PagerRepositoryConvertionDecorator(PagerRepository<T> repo) {
this.repo = repo;
}
@Override
public List<S> getPageEntries() {
List<T> entities = this.repo.getPageEntries();
List<S> dtos = new ArrayList<S>();
for (T e : entities) {
dtos.add(convert(e));
}
return dtos;
}
protected abstract S convert(T entity);
}
这是一个正确的装饰器模式实现吗?
【问题讨论】:
-
如果你可以没有装饰器,那就这样做吧。
-
啊,是的,我确定...这只是好奇... :)
-
那
ENTITY不应该只是T吗? -
@Riccardo 你是对的。
-
它可能是一个适配器 - 在隐蔽接口中 - 从 PagerRepository
到 PagerRepository ?它不添加/隐藏方法,所以看起来像一个装饰器。
标签: java design-patterns