2

我有以下代码片段

class Vehicle{

 public String brand;
 public double price;
 public int productionYear;

 public String toString(String formatType) {
   switch(formatType) {
     case "JSON": // JSON formatting here
        return jsonFormattedString;
        break;
     case "XML": // XML formatting here
        return xmlFormattedString;
        break;
     default: // default formatting
       return defaultFormattedString;
    }
}

我认为这种方法的问题是如果行为发生变化(另一种格式类型)需要更改源代码;以及我错过的其他 SOLID 违规行为。

如何更好地实施?

4

1 回答 1

1

我要做的是介绍另一个用于“导出”您的车辆的类。

像这样的东西。

public class VehicleExporter
{
    public string ExportAsJson(Vehicle vehicle)
    {
        // Do the JSON thing
    }

    public string ExportAsXML(Vehicle vehicle)
    {
        // Do the XML thing
    }
}

你的设计最重要的不是打破开放封闭原则,而是车辆类的责任。

当您的班级执行 toString() 时,它实际上是在尝试做一些超出其职责范围的事情。

如果我能进一步澄清,请告诉我。

于 2019-01-31T12:41:20.720 回答