首页 > 解决方案 > 设计模式:如何将以下场景构造成适当的类?

问题描述

这更像是一个代码“架构”问题。我有两个班一和二。它们都需要数据和样式,所以我使用在父类中实现的两个方法 getData 和 getStyles。在第二类中,我对数据和样式执行了一些额外的“转换”或处理,然后将其返回。

这是一个好方法吗?有没有办法让它变得更好?例如,我在第一类和第二类中使用了两条相同的行 getData() 和 getStyles()。

public abstract class Base {
   protected Data getData() {
       // some code to get data and return it
   }

   protected Styles getStyles() {
       // some code to get styles and return it
   }
}

public class One extends Base {
   public String generateResult() {
       Data data = getData();
       Styles styles = getStyles();
       return getStreamedResult(data, styles);
   }
}

public class Two extends Base {
   public String generateResult() {
       Data data = getData();
       Styles styles = getStyles();
       Transforms transformedResult = performTransform(data, styles);
       return getStreamedResult(transformedResult);
   }
}

标签: javaoopinheritancedesign-patterns

解决方案


这边走:

public abstract class Base {
   protected Data getData() {
       // some code to get data and return it
   }

   protected Styles getStyles() {
       // some code to get styles and return it
   }

   public String generateResult() {
       Data data = getData();
       Styles styles = getStyles();
       Transforms transformedResult = performTransform(data, styles);
       return getStreamedResult(transformedResult);
   }

   public abstract Transforms performTransform(Data data, Styles styles);
}

public class One extends Base {
   @Override
   public Transforms performTransform(Data data, Styles styles) {
      // unit transform, data and styles are unmodified
   }
}

public class Two extends Base {
   @Override
   public Transforms performTransform(Data data, Styles styles) {
      // intended transforms for class Two
   }
}

在每个子类中,您只需要指定转换是什么。


推荐阅读