猿问

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

我想知道应该为我的场景设置什么最佳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);

}


幕布斯6054654
浏览 191回答 3
3回答

FFIVE

您需要一个了解 ClassA 和 ClassB 的所有成员的类型。将 ClassA 或 ClassB 彼此耦合是一个坏主意,因此您通常会看到第三种类型实现如下接口:interface Converter<T, R> {&nbsp; R convert(T obj);}你可以为你的类实现这个接口:class AtoBConverter implements Converter<ClassA, ClassB> {&nbsp; public ClassB convert(ClassA obj) {&nbsp; &nbsp; ...&nbsp; }}这假定 ClassA 具有允许您检查其状态的公共方法,而 ClassB 具有允许您修改其状态的构造函数/设置器。严格来说,如果所有三个类都在同一个 java 包中,您可以将这些方法/构造函数声明为包私有。

慕姐8265434

您绝对应该选择一个单独的处理程序类来处理此转换。作为一个小的优化,您可以在此处理程序类上使用静态 api,这样无论何时您希望在两个对象之间执行转换,您都不必实例化处理程序类的实例。例如:假设您需要将类型 A 的对象转换为类型 B 的对象。您的转换器可能看起来像class AToBConverter {&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public static B convert(A objA){&nbsp; &nbsp; &nbsp; &nbsp;//business logic to convert objA to objB&nbsp; &nbsp; &nbsp; &nbsp;return objB;&nbsp; &nbsp;} }这里的优点是,无论何时需要将 A 类型的对象转换为 B 类型的对象,您都可以简单地执行以下操作:B objB = AToBConverter.convert(objA); //Note how we don't need to create an instance of the converter

森林海

对 ClassB 使用带参数 (ClassA) 的构造函数,反之亦然ClassA(ClassB&nbsp;object){ ... }
随时随地看视频慕课网APP

相关分类

Java
我要回答