Oop 固体违反开闭原理
我有以下代码片段Oop 固体违反开闭原理,oop,principles,open-closed-principle,Oop,Principles,Open Closed Principle,我有以下代码片段 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;
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;
}
}
我认为这种方法的问题在于需要改变
行为改变时的源代码(另一种格式类型);
也许还有我错过的其他实质性违规
如何更好地实现这一点?我要做的是引入另一个类来“导出”您的车辆 像这样的
public class VehicleExporter
{
public string ExportAsJson(Vehicle vehicle)
{
// Do the JSON thing
}
public string ExportAsXML(Vehicle vehicle)
{
// Do the XML thing
}
}
你的设计最大的问题不是打破开闭原则,而是车辆类别的责任
当您的类执行toString()时,它实际上是在尝试执行超出其职责范围的操作
请让我知道我是否可以进一步澄清。这个类的责任是什么?违反严格意义上的“toString”方法。我想说的是,在你有一个有意义的类之前,不要被SOLID所束缚。这是一个没有任何行为的“哑”类。人们甚至可以争论为什么要上这门课;如果您想在某个地方保存可以序列化为JSON、XML等的数据,请构建一组类来执行
Map
ojbects的序列化。随着序列化需求的变化,您可以派生新类。