❄️ Open/Closed Principle (اصل باز و بسته): ببینید مثلا ما می خوایم تخفیف بدیم. نوع های مختلفی از تخفیف هم داریم بدون این اصل اینجوری کد می زنیم:
class DiscountCalculator {
public double calculateDiscount(double amount, String discountType) {
if (discountType.equals("Seasonal")) {
return amount * 0.1; // 10% تخفیف فصلی
}
return 0;
}
}
حالا اگه بخوایم یه تخفیف جدید اضافه کنیم، باید کلاسمون رو تغییر بدیم:
class DiscountCalculator {
public double calculateDiscount(double amount, String discountType) {
if (discountType.equals("Seasonal")) {
return amount * 0.1; // 10% تخفیف فصلی
} else if (discountType.equals("Loyalty")) {
return amount * 0.15; // 15% تخفیف ویژه مشتریان ویژه
}
return 0;
}
}
ولی طبق این اصل اول نوعی (اینترفیس) به نام تخفیف ایجاد می کنیم:
interface DiscountStrategy {
double calculateDiscount(double amount);
}
حالا برای هر تخفیف یه کلاس می سازیم
class SeasonalDiscount implements DiscountStrategy {
@Override
public double calculateDiscount(double amount) {
return amount * 0.1; // 10% تخفیف فصلی
}
}
class LoyaltyDiscount implements DiscountStrategy {
@Override
public double calculateDiscount(double amount) {
return amount * 0.15; // 15% تخفیف ویژه مشتریان ویژه
}
}
کلاس محاسبه تخفیفمون اینجوری میشه:
class DiscountCalculator {
private DiscountStrategy strategy;
public DiscountCalculator(DiscountStrategy strategy) {
this.strategy = strategy;
}
public double calculate(double amount) {
return strategy.calculateDiscount(amount);
}
}
اینجوری هر تعداد تخفیف بخوایم ایجاد کنیم، میشه اضافه کرد از طرفی هم نیازی به تغییر کلاسمون نداریم
@Esfandune_ir#java #oop #solid #kotlin #شی_گرایی