bra*_*ter 0 java oop design-patterns
类别:
public abstract class BaseHolidayPackageVariant {
private Integer variantId;
private HolidayPackage holidayPackage;
private String holidayPackageType;
}
public class LandHolidayPackageVariant extends BaseHolidayPackageVariant{
}
public class FlightHolidayPackageVariant extends BaseHolidayPackageVariant{
private Destination originCity;
}
public class HolidayPackage{
ArrayList<BaseHolidayPackageVariant> variants;
BaseHolidayPackageVariant defaultVariant;
}
Run Code Online (Sandbox Code Playgroud)
在运行时,如何知道variants []中的给定对象是否为Type,LandPackageVariant或者FlightPackageVariant不执行以下某种操作:
if(holidayPackageType.equals("LandHolidayPackageVariant")
obj = (LandHolidayPackageVariant)variant[i];
else if(holidayPackageType.equals("FlightHolidayPackageVariant")
obj = (FlightHolidayPackageVariant)variant[i];
Run Code Online (Sandbox Code Playgroud)
这个问题源于我在这里提出的设计问题
在良好的面向对象设计中,您不应该知道对象是否属于特定类型.你只需要在它上面调用方法,对象就是正确的.
例如,FlightHolidayPackageVariant有一个originCity不在其他HolidayPackageVariant类中的字段,并且您希望在UI中呈现该字段.解决这个问题的面向对象的方法是以HolidayPackageVariant某种方式使负责控制自己的渲染.假设您的UI将显示每个变体的属性列表.您可以让变体提供这些列表:
public abstract class BaseHolidayPackageVariant {
private int cost;
public Map<String, String> getDetails() {
HashMap<String, String> details = new HashMap<String, String>();
details.put("cost", String.format("%.2f", cost / 100.0));
return details;
}
}
public class FlightHolidayPackageVariant extends BaseHolidayPackageVariant {
private Destination originCity;
@Override
public Map<String, String> getDetails() {
Map<String, String> details = super.getDetails();
details.put("origin city", originCity.getName());
return details;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您的UI代码可以简单地询问每个变体对象的详细信息,而无需知道它是什么类型的变体.
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |