背景:
这是我目前正在处理的代码。首先是基类,它是一个帐户类,它保存有关帐户的信息,并具有一些在大多数情况下更改类属性值的方法。
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 参数的公共构造函数,执行逻辑并且可以很容易地通过重载进行扩展。我可以保留我的私有无参数构造函数以防止无参数构造并允许序列化。
我对编程很陌生。我想知道是否有特定原因使用静态工厂方法而不是公共构造函数,如上所述。做我想做的事情的首选方式是什么?