背景:
这是我目前正在处理的代码。首先,基础类是一个账户类,它包含有关账户的信息,并具有某些方法,这些方法在很大程度上更改类属性的值。
public class Account {
private string _username; [...]
public string Username { get { return _username; } } [...]
public Account() { }
public Account(string[] args) { [...] }
public virtual void ChangePassword(string newPassword) { [...] }
}
然后,我有另一个类用于已创建账户的情况,我将其命名为ActiveAccount。它包含了我想要在账户创建后才能执行的大部分操作逻辑。一些不需要包含在问题解释中的类,请使用您的想象力来假设这些类可能会做什么:
public class ActiveAccount : Account
{
private List<Conversation> _conversations; [...]
public List<Conversation> Conversations { get { return _conversations; } } [...]
private ActiveAccount() { }
public static ActiveAccount CreateAccount(Account account)
{
// Navigate to URL, input fields, create account, etc.
}
public override void ChangePassword(string newPassword)
{
// Navigate to URL, input fields, change password, etc.
// Update property using base method, if no errors.
base.ChangePassword(newPassword);
}
}
我使用静态工厂方法有两个原因。1)我想要一个可定制和可扩展构建对象的方式(例如,将来我可能会有一个AccountTemplate,从中提供通用信息来创建账户;我可以很容易地创建另一个带有AccountTemplate参数的静态工厂方法重载),2)拥有一个无参构造函数使我更容易将这个对象序列化为XML / JSON。
问题:
然而,我意识到我完全可以有一个公共构造函数,接受一个Account参数,执行逻辑并可以像同样方便的扩展重载。我可以保留我的私有无参构造函数以防止无参构造并允许序列化。
我对编程相当陌生。我想知道是否有使用静态工厂方法而不是公共构造函数的特定原因,就像上面所解释的那样。以及我想做的事情的首选方式是什么?