通常创建正确混凝土类型的属性

本文关键字:混凝土 类型 属性 常创建 创建 | 更新日期: 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();
      }
 }