我可以在类外部初始化数组实例变量吗?以下代码的最佳OOP方法是什么?

杰伊

我必须实现配电盘类,该类可以具有风扇,交流电,灯泡等设备。我的配电盘类如下所示。

哪一个是面向对象的?

1。

class SwitchBoard
{
    public static int totalDevices=0;
    public List<ElectricDevice> Devices { get; set; }
    public SwitchBoard(int noOfFans, int noOfACs, int noOfBulbs)
    {
        Devices = new List<ElectricDevice>();
        //int deviceCount = 0;
        for (int i = 0; i < noOfACs + noOfBulbs + noOfFans; i++)
        {
            if (i < noOfFans)
            {
                Devices.Add(new Fan("Fan " + (i + 1),totalDevices));
            }

            else if (i >= noOfFans && i < noOfFans + noOfACs)
            {
                Devices.Add(new AC("AC " + (i - noOfFans + 1), totalDevices));
            }

            else
            {
                Devices.Add(new Bulb("Bulb " + (i - noOfFans - noOfACs + 1), totalDevices));
            }
            totalDevices++;
        }
    }
}

2。

class SwitchBoard
{
    public static int totalDevices=0;
    public List<ElectricDevice> Devices { get; set; }
    public SwitchBoard(int noOfFans, int noOfACs, int noOfBulbs)
    {
        Devices = new List<ElectricDevice>();

                CreateDevice(Devices, "Fan", noOfFans);
                CreateDevice(Devices, "AC", noOfACs);
                CreateDevice(Devices, "Bulb", noOfBulbs);

    }

我觉得第一种方法是最好的方法,因为在第二种方法中,我们使用的方法是通过在类之外获取属性并在其外部实例化来实例化该类。就像从开关板上取出开关并将其连接到风扇并将其放回到开关板上一样。

我认为这与封装有关。

CreateDevice的伪代码

function CreateDevice(List<EelectricDevice> Devices, string type, int noOfObjects )
{
for(int i=Devices.Length; i<noOfDevices+Devices.Length;i++)
{
         if(type=="Fan")
                 Device[i]=new Fan("Fan"+i);
         else if(type=="AC")
                 Device[i]=new AC("AC"+i);
      else if(type=="Bulb")
                 Device[i]=new Bulb("Bulb"+i);
}
}
瑜伽士

系统设计很难建议,因为有很多事情需要考虑。

但是,将其保持在最低限度并坚持您的问题,有几件事需要考虑-

建议有一个interface类似的东西ISwitchable,可以由ElectricDevice实现,并且可以切换从概念上讲,这很重要,因为并非所有的ElectricDevices都是可切换的-

public interface ISwitchable
{
}

现在,您可以在设备中实现以下功能-

public class Fan : ElectricDevice, ISwitchable
{
    //Implementation of fan
}

对于设备总数,应将其实现为只读属性,该属性是所有设备的总和,否则该值可能会被篡改。无需每次迭代都计算该值。

最后,这就是您的SwitchBoard课程外观-

public class SwitchBoard
{
    public List<ISwitchable> switchableDevices { get; private set; }

    public int TotalSwichableDevices
    {
        get { return numberOfFans + numberOfACs + numberOfBulbs; }
    }
    private readonly int numberOfFans;
    private readonly int numberOfACs;
    private readonly int numberOfBulbs;

    public SwitchBoard(int noOfFans, int noOfACs, int noOfBulbs)
    {
        this.numberOfFans = noOfFans;
        this.numberOfACs = noOfACs;
        this.numberOfBulbs = noOfBulbs;

        switchableDevices = new List<ISwitchable>();
        switchableDevices.AddRange(this.AddFans());

        //TODO: Add other devices
    }

    private IEnumerable<ISwitchable> AddFans()
    {
        List<ISwitchable> fans = new List<ISwitchable>();
        for (int i = 0; i < numberOfFans; i++)
        {
            fans.Add(new Fan());
        }
        return fans;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在类中初始化以下实例的最佳方法是什么?

来自分类Dev

为什么以下代码取决于我初始化变量的时间?

来自分类Dev

在python的类中初始化实例变量的最佳实践是什么?

来自分类Dev

在TensorFlow中初始化变量的最佳方法是什么?

来自分类Dev

初始化数组“ memset”或“ {// value}”的最佳方法是什么?

来自分类Dev

初始化我的数字变量的正确方法是什么?

来自分类Java

有什么方法可以改善以下代码的性能吗?

来自分类Dev

我可以从前面提到的实例变量中获取初始化列表中数组的堆内存吗?

来自分类Dev

我可以使用其基类的实例初始化派生的数据类吗?

来自分类Dev

在gradle文件中声明的minifyEnabled是什么。我可以知道以下代码块的含义和用法吗?

来自分类Dev

我可以使用.vue类组件初始化vue根实例吗?

来自分类Python

跨Python类初始化和使用常量的最佳方法是什么?

来自分类Dev

测试类静态初始化程序的最佳方法是什么?

来自分类Dev

在 React 中加载 DOM 后定义/初始化变量的最佳方法是什么?

来自分类Dev

为什么我的代码块实例变量没有初始化并打印出“ NSGlobalBlock”?

来自分类Dev

这段代码中的数组初始化样式是什么?是标准的吗?

来自分类Dev

初始化我想跨多个线程共享的静态对象的最佳方法是什么

来自分类Python

在Python中初始化dict的最佳方法是什么?

来自分类Dev

推迟类属性初始化的最佳方法是什么?

来自分类Java

初始化Quartz的最佳方法是什么?

来自分类Java

初始化bean的最佳方法是什么?

来自分类Dev

进行昂贵的初始化的最佳方法是什么?

来自分类Dev

当我调用类的实例方法时,为什么初始化不显示为方法?

来自分类Java

用更少的代码在Java中初始化变量的更好方法是什么?

来自分类Dev

以下代码段中〜once〜变量的含义是什么?

来自分类Dev

为什么以下代码导致模板实例化?

来自分类Dev

初始化包含元组数组的类的正确和简便方法是什么?

来自分类Dev

为什么在类外部用静态变量的重新声明来初始化静态变量?我们不能只初始化它而不是重新声明它吗?

来自分类Dev

从列表/数组字典迭代实例化类的最佳方法是什么?

Related 相关文章

  1. 1

    在类中初始化以下实例的最佳方法是什么?

  2. 2

    为什么以下代码取决于我初始化变量的时间?

  3. 3

    在python的类中初始化实例变量的最佳实践是什么?

  4. 4

    在TensorFlow中初始化变量的最佳方法是什么?

  5. 5

    初始化数组“ memset”或“ {// value}”的最佳方法是什么?

  6. 6

    初始化我的数字变量的正确方法是什么?

  7. 7

    有什么方法可以改善以下代码的性能吗?

  8. 8

    我可以从前面提到的实例变量中获取初始化列表中数组的堆内存吗?

  9. 9

    我可以使用其基类的实例初始化派生的数据类吗?

  10. 10

    在gradle文件中声明的minifyEnabled是什么。我可以知道以下代码块的含义和用法吗?

  11. 11

    我可以使用.vue类组件初始化vue根实例吗?

  12. 12

    跨Python类初始化和使用常量的最佳方法是什么?

  13. 13

    测试类静态初始化程序的最佳方法是什么?

  14. 14

    在 React 中加载 DOM 后定义/初始化变量的最佳方法是什么?

  15. 15

    为什么我的代码块实例变量没有初始化并打印出“ NSGlobalBlock”?

  16. 16

    这段代码中的数组初始化样式是什么?是标准的吗?

  17. 17

    初始化我想跨多个线程共享的静态对象的最佳方法是什么

  18. 18

    在Python中初始化dict的最佳方法是什么?

  19. 19

    推迟类属性初始化的最佳方法是什么?

  20. 20

    初始化Quartz的最佳方法是什么?

  21. 21

    初始化bean的最佳方法是什么?

  22. 22

    进行昂贵的初始化的最佳方法是什么?

  23. 23

    当我调用类的实例方法时,为什么初始化不显示为方法?

  24. 24

    用更少的代码在Java中初始化变量的更好方法是什么?

  25. 25

    以下代码段中〜once〜变量的含义是什么?

  26. 26

    为什么以下代码导致模板实例化?

  27. 27

    初始化包含元组数组的类的正确和简便方法是什么?

  28. 28

    为什么在类外部用静态变量的重新声明来初始化静态变量?我们不能只初始化它而不是重新声明它吗?

  29. 29

    从列表/数组字典迭代实例化类的最佳方法是什么?

热门标签

归档