java - 寻找一种在没有数据库的情况下填充类的设计模式

标签 java c# oop design-patterns

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

7年前关闭。




Improve this question




我正在寻找设计模式来帮助解决与类实例化相关的特定问题

假设我有一个名为 CarModel 的类,它具有以下属性:

CarModel
{
  string MakeName
  string ModelName
  int NumberOfDoors
  int NumberOfLiters
  string StereoMake
  bool HasAC
  List<Color> ColorOptions
  ...etc
}

假设我的应用程序将在代码中为不同车型(如 2015 Toyota Camry LE、2015 Toyota Corolla SE、2013 Ford Mustang GT 等)从多个位置实例化此类。

这些不是单例,但是每次为 2015 Toyota Camry LE 实例化时,基本属性将始终相同(因为这些是 2015 Toyota Camry LE 的属性)。所有车型的所有属性都将被填充(因此这不是构建器的情况)。

最后,假设这些属性无法从数据库或配置文件中获取(假设平台不支持)。

我不希望发生的是,我不希望代码中实例化 carModel 的每个地方都必须将这些属性作为参数传递给构造函数。调用者不必知道它们,而且它可能导致错误和维护问题。

我想要发生的是,我希望调用者只指定它想要的汽车型号,并且应该填充类。通常这样的用例我会使用数据库后端,但同样,这不是一个选项。

我现在在想的是,我将一个枚举值传递给构造函数,并且该类将基于它进行自我初始化。所以:
public CarModel(CarModelTypes cmt)
{
  if(cmt == CarModelTypes.2015_Toyota_Camry_LE)
  {
  MakeName = "Toyota";
  ModelName = "Camry";
  NumberOfDoors = 4;
  etc...
  }
  else if(cmt == CarModelTypes.2013_Ford_Mustang_GT)
  {
  MakeName = "Ford";
  ModelName = "Mustang";
  NumberOfDoors = 2;
  etc
  }
  else if(etc...
}

我会把它放到一个单独的函数中,但你明白了。不过不确定我是否喜欢。感觉很丑然后我想我可以为每个继承自 CarModel 的汽车模型类型创建一个类,并且它们可以实例化自己,所以:
public class Car2015ToyotaCamryLE : CarModel
{
  string MakeName = "Toyota";
  string ModelName = "Camry";
  int NumberOfDoors = 4
  etc

  public Car2015ToyotaCamryLE()
  {
  }
}

但似乎我在这里真正做的是创建类的实例作为类本身,这感觉完全不对。再加上类(class)的数量可能会增加。即使我们将其保留为 20 个模型,这仍然是项目中的 20 个额外类。

所以,这就是我在这里的原因。任何人都有任何好的想法来处理这个问题,或者任何人都知道专门为此设计的设计模式?否则我可能会选择第一个选项。

谢谢

最佳答案

纵观您的要求的明显异常,这是 factory method pattern 的一个明显案例。 .

您在中间大约一半的示例是工厂模式的确切反模式。如果您查看我在上面链接的文章,您将看到以下内容。这似乎可以满足您的给定要求,并且将这些信息存储在类文件中是完全可以接受的,尽管这使得以后更改它们变得更加困难(不确定在此示例中是否有必要,只是说)。

public interface ICar
{
    string GetMake();
    string GetModel();
}

public class ToyotaCamry : ICar
{
    #region ICar Members

    public string GetMake()
    {
        return "Toyota";
    }

    public string GetModel()
    {
        return "Camry";
    }

    #endregion
}

public class FordMustang : ICar
{
    #region ICar Members

    public string GetMake()
    {
        return "Ford";
    }

    public string GetModel()
    {
        return "Mustang";
    }
    #endregion
}

public enum CarType
{
    FordMustang,
    ToyotaCamry
}

/// <summary>
/// Implementation of Factory - Used to create objects
/// </summary>
public class Factory
{
    public ICar GetCar(CarType type)
    {
        switch (type)
        {
            case CarType.FordMustang :
                return new FordMustang();
            case CarType.ToyotaCamry:
                return new ToyotaCamry();
        }
        return null;
    }
}

关于java - 寻找一种在没有数据库的情况下填充类的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27946664/

相关文章:

java - 使用tomcat时无法使用java包

java - 使用用户名和密码访问 Azure Active Directory

java - 常见做法是什么?类型放置

java - 通过单击更改 Android Studio 图像的颜色

javascript - 查询对象数组javascript

java - 用于访问 volatile 实例变量的局部变量

c# - 限制并发调用的最佳实践

c# - 通过将方法作为变量发送来简化代码

javascript - 如何判断文本框在C#中是否仅包含空格?

java - Java `this` 在继承情况下实际指的是什么?