基于枚举值设置对象中某些字段的设计模式。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于枚举值设置对象中某些字段的设计模式。相关的知识,希望对你有一定的参考价值。
所以基本上我想做的是,根据一个枚举列表来填充而不是填充对象中的某些字段。
比如说这个对象。
case class Car(brand: String,
model: String,
wheels: Int,
airbags: Boolean,
seats: Int,
cruiseControl: Boolean,
photo: String,
parkingAssist: Boolean)
这是一个完整的对象, 根据Java枚举类型的列表 我想设置某些字段. 此外,组合也是可能的,它们可能会重叠。
enum CarType {
BASIC_CAR,
LUXURY_CAR,
SAFE_CAR,
PICTURE_CAR
}
所以基本上根据CarType,我想设置Car的某些字段。例如:BASIC_CAR需要设置品牌。
BASIC_CAR需要设置品牌,型号,轮子和座位。
LUXURY_CAR需要设置品牌,车型,巡航控制和停车辅助系统。
SAFE_CAR需要设置安全气囊
PICTURE_CAR需要设置停车辅助功能。
所以我将收到这些枚举的列表,然后需要创建对象。例如,我将有一个对象,其中包括BASIC_CAR, LUXURY_CAR, SAFE_CAR,这意味着我创建的对象将必须拥有除parkingAssist之外的所有字段。
所以最后,枚举与某些字段有关,基本上我需要在对象中设置某些字段的(组合)枚举。这样的设计有什么好处呢?
答案
我认为你应该使用Decorator模式来解决这个问题.看看这个网站就能得到一个例子。https:/sourcemaking.comdesign_patternsdecorator
我编辑了我的帖子,以便更加具体,我的意思是这样的。
public interface Car {
public void assemble();
}
public class BasicCar implements Car {
@Override
public void assemble() {
//set basic car: brand, model, wheels and seats.
}
}
public class CarDecorator implements Car {
protected Car car;
public CarDecorator(Car c){
this.car=c;
}
@Override
public void assemble() {
this.car.assemble();
}
}
public class LuxuryCar extends CarDecorator {
public LuxuryCar(Car c) {
super(c);
}
@Override
public void assemble(){
super.assemble();
//add especial fields for luxury car or override values from basic car
}
}
根据Enum值的不同,你可以创建不同的类:new LuxuryCar(),new SportCar()
以上是关于基于枚举值设置对象中某些字段的设计模式。的主要内容,如果未能解决你的问题,请参考以下文章