java - 设计模式:如何将以下场景构造成适当的类?
问题描述
这更像是一个代码“架构”问题。我有两个班一和二。它们都需要数据和样式,所以我使用在父类中实现的两个方法 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
}
}
在每个子类中,您只需要指定转换是什么。
推荐阅读
- php - PHP - 为什么某些字符串函数名称不带下划线,例如 strlen?
- animation - 在颤动中使用drawRRect的动画
- python - 使用 pip 安装 splitterkit
- javascript - 打印机脚本运行后 Javascript 自动提交未执行
- html - 尝试将 HTML 元素对角对齐并使它们都具有相同的大小
- webpack - 如何使用 html-webpack-plugin 从 .pug 模板加载资产
- apache-spark - Spark 流不从 Kinesis 读取数据
- python - 在 Python 中从数据框中提取字符串
- excel - 验证文本框条目中的日期格式
- python - 通过 Python 代码登录 SAP GUI 时如何检查错误