我有两个类,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
}
}
Run Code Online (Sandbox Code Playgroud)
哪些(如果有的话)是常见做法?根据他们的签名,他们中的任何一个都有影响吗?例如,使用构造函数通常会传达B是否持有对传入的A的引用?这些是我正在考虑的考虑因素.
谢谢!
您提到的所有选项均有效。您选择哪种取决于具体情况。
//constructor?
public B(A a)
{
//set b's properties from a
}
Run Code Online (Sandbox Code Playgroud)
当 B 没有 A 的数据而无法存在时,可以选择构造函数模式。
//factory method?
public static B FromA(A a)
{
B b = new B();
//set b's properties from a
return b;
}
Run Code Online (Sandbox Code Playgroud)
当 B 获取的值依赖于 A 或 B 中的值时,工厂方法将是选择的模式。特别是如果 B 具有后代,则 A 中的值将提供构造选择。
//setter method?
public static void SetBFromA(B b, A a)
{
//set b's properties from a
}
Run Code Online (Sandbox Code Playgroud)
setter 方法在您的场景中不适用,因为当 A 和 B 彼此不认识且第三方需要调解时,将使用该方法。
//assignment method?
public void AssignFrom(A a)
{
//set b's properties from a
}
Run Code Online (Sandbox Code Playgroud)
这本质上是一种访客模式。A 拜访了 B,并留下了自己的一些东西(想想单身汉的日子)。如果来自 A 的数据对于 B 来说是可选的,那么这将是选择的模式。
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |