java - 设计模式: How to structure the following scenario into proper classes?

标签 java oop inheritance design-patterns

这更像是一个代码“架构”问题。 我有两个类(class)一和二。它们都需要数据和样式,因此我使用在父类中实现的两个方法 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);
   }
}

最佳答案

这样:

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
   }
}

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

关于java - 设计模式: How to structure the following scenario into proper classes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57143419/

相关文章:

javascript - 如果我使用原型(prototype)创建 OOP JS 代码,如何从循环引用类方法?

c++ - 没有虚拟时应该使用私有(private)继承吗?

java - 即使在扩展后,如何观察自定义对象何时更改

java - 如何更改我的 Android 应用程序列的背景颜色

java - Android - 如何将 ArrayList 逐行写入文本文件并读回?

java - Spring MVC 应用程序中找不到静态资源

java - 抽象数据与抽象行为

Java 内联优化是否正确?

java - 在 RoR 中构建股票市场交易游戏,可以使用哪些库?

c++ - 一个Derived类需要多少空间?如果它本身和它的基类都有虚方法?