我有两个类,A和B. B知道A,A不知道B. B有可以很好地设置A的属性,虽然A和B之间没有共享的继承.会有很多次当我需要从A分配B的属性时,我正在寻找关于我应该放置代码的指针.
public class A { } public class B { //constructor? public B(A a) { //set b's properties from a } //factory method? public static B FromA(A a) { B b = new B(); //set b's properties from a return b; } //setter method? public static void SetBFromA(B b,A a) { //set b's properties from a } //assignment method? public void AssignFrom(A a) { //set b's properties from a } } //static helper class? public static class BHelper { public static B GetBFromA(A a) { B b = new B(); //set b's properties from a return b; } public static void SetBFromA(B b,A a) { //set b's properties from a } }
哪些(如果有的话)是常见做法?根据他们的签名,他们中的任何一个都有影响吗?例如,使用构造函数通常会传达B是否持有对传入的A的引用?这些是我正在考虑的考虑因素.
谢谢!
解决方法
您提到的所有选项都是有效的.您选择哪种方式取决于具体情况.
//constructor? public B(A a) { //set b's properties from a }
如果没有来自A的数据,B不能存在时,构造函数模式将是选择.
//factory method? public static B FromA(A a) { B b = new B(); //set b's properties from a return b; }
当B值得到的依赖于A或B中的值时,工厂方法将是选择模式.特别是如果B具有后代,则A中的值将提供构造选择.
//setter method? public static void SetBFromA(B b,A a) { //set b's properties from a }
setter方法不适用于您的场景,因为当A和B不知道彼此并且第三方需要调解时,将使用此方法.
//assignment method? public void AssignFrom(A a) { //set b's properties from a }
这基本上是访客模式.访问B并留下一些东西(想想单身汉).如果来自A的数据对于B是可选的,那么这将是选择的模式.