首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >装饰模式受到尊重吗?

装饰模式受到尊重吗?
EN

Stack Overflow用户
提问于 2014-02-26 10:56:25
回答 1查看 109关注 0票数 0

正如许多示例(例如,pattern#Java)中所描述的那样,抽象装饰类只需转发组件方法。

但是在我的例子中,我需要重写一个仅在抽象类中的方法(对于类型转换):

组件

代码语言:javascript
运行
复制
public interface PagerRepository<T> {
    List<T> getPageEntries();
}

混凝土构件

代码语言:javascript
运行
复制
public abstract class ConcretePagerRepository<T> implements PagerRepository<T> {

    // @Override ...

}

抽象装饰器

代码语言:javascript
运行
复制
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);
}

这是正确的装饰模式实现吗?

EN

回答 1

Stack Overflow用户

发布于 2014-02-26 11:07:02

您的代码看起来像是想要简单地重用一个抽象方法实现,然后应用一些转换--如果使用第三方代码,我会批准这种方法,但在这种情况下,您可以控制类层次结构,因此我将在抽象基类中提取公共行为(您的ConcretePagerRepositoryPagerRepositoryConvertionDecorator将各自扩展)。此外,覆盖已经重写的抽象方法并不是特别好的编码风格,因为您正在秘密地继承代码。为继承而设计的方法应该是抽象的或空的,或者,如果不打算继承,则应该是final

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22039199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档