开闭原则假如正在开发酒店预订系统,针对不同用户,需要计算出不同的房价。比如,普通用户是全价,金卡是8折,银卡是9 折,
时间: 2024-11-09 19:24:51 浏览: 13
开闭原则(Open-Closed Principle,OCP),又称为“开放扩展、关闭修改”原则,是软件设计模式中的一个核心原则。它提倡在对现有代码进行最小改动的前提下,增加新的功能或行为。回到您的酒店预订系统例子中:
如果按照开闭原则设计,初始的系统应该提供一个基本的计算房价的功能,接受用户的等级作为输入并返回相应的折扣后的价格。例如,可以有一个基础的`calculatePrice()`方法,接收一个用户等级作为参数。
```java
public class HotelBookingSystem {
public double calculatePrice(UserType userType) {
if (userType == UserType.Regular) {
return roomCost; // 全价
} else if (userType == UserType.Gold) {
return roomCost * 0.8;
} else if (userType == UserType.Silver) {
return roomCost * 0.9;
}
}
}
```
然后,当需要为新的用户类型(如白金卡用户)添加支持时,你应该在不改变已有代码的情况下,通过添加一个新的用户类型和对应的计算方法来实现,而不是直接修改现有的代码。这可能是通过扩展用户类型或者创建一个策略类来封装不同的折扣规则。
```java
public class PlatinumUserType extends UserType {
@Override
public double getPriceDiscount() {
return roomCost * 0.7; // 白金卡85折
}
}
// 或者
public interface DiscountCalculator {
double getPriceDiscount();
}
public class RegularDiscount implements DiscountCalculator {
// ...
}
public class SilverDiscount implements DiscountCalculator {
// ...
}
```
阅读全文