当具体实现具有不同的可能属性时使用构建器模式
Using a builder pattern when concrete implementations have different possible properties
我目前正在为用于 2 种预订的预订系统设计域。
这两种类型都有共同的属性,例如它们的日期和位置。不过,两者也都具有对方所没有的属性。这里的示例是您可以带客人一起来的一种类型,而不是另一种类型;或者您可以要求一种午餐,而不是另一种。
目前我有一个抽象的预订 class,每个预订类型都有一个具体的实现。然后我有一个 ReservationBuilder,它将枚举(保留类型)作为其构造函数中的参数。然后,此构建器将包含两种类型的预订的方法,并且使用一种无法使用信息的预订类型的方法将在构建时不执行任何操作,或者引发错误。
但有些事情告诉我,这不是该模式的好用法。将构建器也抽象化会更好吗?还是工厂模式更适合我的用例?
您已确定需要抽象超级class,Reservation
。您还确定了儿童 classes 的专业化需求,例如 GroupReservation
、RoomServiceReservation
.
使用构建器或工厂模式的动机是什么?如果问题是在给定字符串的情况下创建 class 的新实例,一些 if
语句或 case
语句就可以正常工作。
if(userSelection.equals("group")) {
return new GroupReservation();
}
如果动机是为了更复杂的事情,建筑商或工厂 class 可能会有用。选择和实例化具体 class 的杂乱细节可以通过这种方式隐藏。
面向对象的程序员可能会不知不觉地戴上“模式护目镜”。当我们佩戴图案护目镜时,我们会处理每一个设计选择,以寻找合适的图案来实施。有时我们可以使用一种语言特性来消除对模式的需要。有时 if
语句就足够了。
我目前正在为用于 2 种预订的预订系统设计域。
这两种类型都有共同的属性,例如它们的日期和位置。不过,两者也都具有对方所没有的属性。这里的示例是您可以带客人一起来的一种类型,而不是另一种类型;或者您可以要求一种午餐,而不是另一种。
目前我有一个抽象的预订 class,每个预订类型都有一个具体的实现。然后我有一个 ReservationBuilder,它将枚举(保留类型)作为其构造函数中的参数。然后,此构建器将包含两种类型的预订的方法,并且使用一种无法使用信息的预订类型的方法将在构建时不执行任何操作,或者引发错误。
但有些事情告诉我,这不是该模式的好用法。将构建器也抽象化会更好吗?还是工厂模式更适合我的用例?
您已确定需要抽象超级class,Reservation
。您还确定了儿童 classes 的专业化需求,例如 GroupReservation
、RoomServiceReservation
.
使用构建器或工厂模式的动机是什么?如果问题是在给定字符串的情况下创建 class 的新实例,一些 if
语句或 case
语句就可以正常工作。
if(userSelection.equals("group")) {
return new GroupReservation();
}
如果动机是为了更复杂的事情,建筑商或工厂 class 可能会有用。选择和实例化具体 class 的杂乱细节可以通过这种方式隐藏。
面向对象的程序员可能会不知不觉地戴上“模式护目镜”。当我们佩戴图案护目镜时,我们会处理每一个设计选择,以寻找合适的图案来实施。有时我们可以使用一种语言特性来消除对模式的需要。有时 if
语句就足够了。