java - 对象转换器的面向对象设计模式
问题描述
我想知道应该为我的场景采用哪种最佳OOP 设计模式。
场景:
我有两个班级,ClassA 和 ClassB。我想将 ClassA 转换为新的 ClassB,但是 ClassA 可能会更改其成员变量和方法。这意味着可能必须更新将 ClassA 转换为 ClassB 的方式。
促进从 ClassA 到新 ClassB 的转换的最佳 OOP 设计是什么?
目标:
创建一个允许轻松更改将 ClassA 转换为 ClassB 的方式的设计模式。
例子:
A类
public class ClassA {
private String actionName;
// With some getters & setters
}
B类
public class ClassB {
private String action; // Note the subtle difference
// With some getters & setters
}
处理程序
public class Handler {
ClassB classB = new ClassB();
// Convert ClassB to ClassA
This.publish(ClassA);
}
解决方案
您需要一个了解 ClassA 和 ClassB 的所有成员的类型。将 ClassA 或 ClassB 相互耦合是一个坏主意,因此您通常会看到实现如下接口的第三种类型:
interface Converter<T, R> {
R convert(T obj);
}
你可以为你的类实现这个接口:
class AtoBConverter implements Converter<ClassA, ClassB> {
public ClassB convert(ClassA obj) {
...
}
}
这假定 ClassA 具有允许您检查其状态的公共方法,并且 ClassB 具有允许您修改其状态的构造函数/设置器。严格来说,如果所有三个类都在同一个 java 包中,则可以将这些方法/构造函数声明为包私有。
推荐阅读
- javascript - 大家好。我在代码中有一个愚蠢的问题。你可以帮助我?
- java - JTable 信息到 Jlabels
- c# - 在函数体内访问 Array 的 Method 参数
- sql - 按类别分组以在 SQL 中按月显示差异
- python-3.x - Visual Studio Code:在 python 中突出显示的导入
- collections - 无法在 Postman 中使用变量命中端点
- java - 如何强制 Testcontainers 使用特定的 docker 镜像?
- python - 如何根据列表中的元素之一对给定的python字典进行排序,并将列表作为值?
- javascript - VueJS:绑定一个具有 3 个潜在值的变量?
- awk - 列中的 Linux 单词以“a”结尾