首页 > 解决方案 > 对象转换器的面向对象设计模式

问题描述

我想知道应该为我的场景采用哪种最佳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);
}

标签: javaoopobjectdesign-patternsobject-oriented-analysis

解决方案


您需要一个了解 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 包中,则可以将这些方法/构造函数声明为包私有。


推荐阅读