为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

幕布斯6054654 2023-03-23 13:47:42
我想知道应该为我的场景设置什么最佳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);}
查看完整描述

3 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

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


查看完整回答
反对 回复 2023-03-23
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

您绝对应该选择一个单独的处理程序类来处理此转换。


作为一个小的优化,您可以在此处理程序类上使用静态 api,这样无论何时您希望在两个对象之间执行转换,您都不必实例化处理程序类的实例。


例如:


假设您需要将类型 A 的对象转换为类型 B 的对象。您的转换器可能看起来像


class AToBConverter {

    

   public static B convert(A objA){

       //business logic to convert objA to objB

       return objB;

   } }

这里的优点是,无论何时需要将 A 类型的对象转换为 B 类型的对象,您都可以简单地执行以下操作:


B objB = AToBConverter.convert(objA); //Note how we don't need to create an instance of the converter



查看完整回答
反对 回复 2023-03-23
?
森林海

TA贡献2011条经验 获得超2个赞

对 ClassB 使用带参数 (ClassA) 的构造函数,反之亦然

ClassA(ClassB object){
...
}


查看完整回答
反对 回复 2023-03-23
  • 3 回答
  • 0 关注
  • 138 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信