Rajat's Notes

Personal knowledge based for Tech, Interviews and many more.

This project is maintained by im-Rajat

Open Close Principle

Bad Implementation :

public class EmployeeSalary {
    public long calculateSalary(Employee emp) {
        long salary = null;

        if (emp.getType().equals("PERMANENT")) {
            salary = (totalWorkingDay * basicPay) + getCompanyBenefits() + getBonus();
        }
        else if (emp.getType().equals("CONTRACT")) {
            salary = (totalWorkingDay * basicPay);
        }
    }

    return salary;
}

Good Implementation :

public interface EmployeeSalary {
    public long calculateSalary();
}

public class PermanentEmployeeSalary implements EmployeeSalary {
    @Override
    public long calculateSalary() {
        salary = (totalWorkingDay * basicPay) + getCompanyBenefits() + getBonus();
    }
}

public class ContractEmployeeSalary implements EmployeeSalary {
    @Override
    public long calculateSalary() {
        salary = (totalWorkingDay * basicPay);
    }
}