Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Open/Closed Principle */
- // Before
- class Employee {
- public enum EmployeeType {
- DIRECTOR, SOFTWARE_ENGINEER, DESIGNER;
- }
- private final EmployeeType type;
- public Employee(EmployeeType type) {
- this.type = type;
- }
- public EmployeeType getType() {
- return type;
- }
- }
- class PayCalculator {
- public BigDecimal calculatePay(Employee employee) {
- BigDecimal baseSalary;
- switch (employee.getType()) {
- case DIRECTOR:
- baseSalary = new BigDecimal("300000");
- break;
- case SOFTWARE_ENGINEER:
- baseSalary = new BigDecimal("150000");
- break;
- case DESIGNER:
- baseSalary = new BigDecimal("120000");
- break;
- default:
- throw new AssertionError();
- }
- // Calculate pay here
- return new BigDecimal("");
- }
- }
- // After
- class Employee {
- public enum EmployeeType {
- DIRECTOR(new BigDecimal("300000")),
- SOFTWARE_ENGINEER(new BigDecimal("150000")),
- DESIGNER(new BigDecimal("120000"));
- private final BigDecimal baseSalary;
- EmployeeType(BigDecimal baseSalary) {
- this.baseSalary = baseSalary;
- }
- public BigDecimal getBaseSalary() {
- return baseSalary;
- }
- }
- private final EmployeeType type;
- public Employee(EmployeeType type) {
- this.type = type;
- }
- public BigDecimal getBaseSalary() {
- return type.getBaseSalary();
- }
- }
- class PayCalculator {
- public BigDecimal calculatePay(Employee employee) {
- BigDecimal baseSalary = employee.getBaseSalary();
- // Calculate
- return new BigDecimal("");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment