通常创建正确混凝土类型的属性
本文关键字:混凝土 类型 属性 常创建 创建 | 更新日期: 2023-09-27 18:32:53
我有两个类,它们都遵循相同的接口(IAccount)。它们每个都有一个名为 Preferences 的属性,该属性遵循另一个接口(IAccountPpreferences)。
我想要一种方法来通用地创建首选项属性(即一种采用 IAccount 并为其创建首选项的方法,而不关心传入的 IAccount 的实际类型)。实现这一目标的最佳方法是什么?
我能想到的最佳解决方案是公用事业工厂方法,如下所示(半 pesudocode):
private IAccountPreference getAccountPreference(IAccount acc){
switch(acc.GetType()){
case AccountType1:
return new PreferenceForAccountType1();
case AccountType2:
return new PreferenceForAccountType2();
.
.
.
}
}
并使用它来获取对正确混凝土类型的引用。不过看起来很乱。
我是否错过了更明显的解决方案?
在这种情况下,我通常使用的模式是给IAccount一个名为"CreateDefaultPreferences"的函数,该函数创建并返回该类型帐户的正确子类型的IAccountPpreferences实例。
您可以将 GetAccountPreference 函数移动到 IAccount 接口中,这样 IAccount 的每个实现将负责返回自己正确的 IAccountPreference 实现。
public interface IAccount {
...// Other Contracts
IAccountPreference GetAccountPreference();
}
public class AccountType1 : IAccount {
...// Properties, Methods, Constructor
public IAccountPreference GetAccountPreference() {
return new PreferenceForAccountType1();
}
}