对象转换器的面向对象设计模式

tle*_*z24 2 java oop design-patterns object object-oriented-analysis

我想知道对于我的场景应该采用什么最好的OOP 设计模式。

场景:

我有两个班级,A 班和 B 班。我想将 ClassA 转换为新的 ClassB,但是 ClassA 可能会更改其成员变量和方法。这意味着可能必须更新 ClassA 转换为 ClassB 的方式。

促进从 ClassA 到新 ClassB 的转换的最佳 OOP 设计是什么?

目标:

创建一个设计模式,允许轻松更改将 ClassA 转换为 ClassB 的方式。

例子:

A级

public class ClassA {
    private String actionName;

    // With some getters & setters
}
Run Code Online (Sandbox Code Playgroud)

B级

public class ClassB {
    private String action; // Note the subtle difference

    // With some getters & setters
}
Run Code Online (Sandbox Code Playgroud)

处理程序

public class Handler {
    ClassB classB = new ClassB();

    // Convert ClassB to ClassA

    This.publish(ClassA);
}
Run Code Online (Sandbox Code Playgroud)

Lef*_*une 7

您需要一个了解 ClassA 和 ClassB 的所有成员的类型。将 ClassA 或 ClassB 相互耦合不是一个好主意,因此您通常会看到第三种类型实现如下接口:

interface Converter<T, R> {
  R convert(T obj);
}
Run Code Online (Sandbox Code Playgroud)

您可以为您的类实现此接口:

class AtoBConverter implements Converter<ClassA, ClassB> {
  public ClassB convert(ClassA obj) {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

这假设 ClassA 具有允许您检查其状态的公共方法,而 ClassB 具有允许您修改其状态的构造函数/设置器。严格来说,如果所有三个类都在同一个 java 包中,则可以将这些方法/构造函数声明为包私有。