From fe3a21e8a56aeda24e320f1e288d0a40fa3a1ea9 Mon Sep 17 00:00:00 2001 From: "vinit.kayarkar" Date: Fri, 9 Apr 2021 01:19:58 +0530 Subject: [PATCH] Changes for SRP and LS principles --- .../SOLID/lsp/stack/before/StackWrong.java | 28 +++++++++--- .../before/Employee.java | 34 -------------- .../before/EmployeeList.java | 24 ++++++++++ .../before/EmployeeRepository.java | 44 ++++++++++++++++--- .../before/SaveEmployeesMain.java | 9 ++-- 5 files changed, 89 insertions(+), 50 deletions(-) create mode 100644 src/oops/SOLID/singleResponsibilityPrinciple/before/EmployeeList.java diff --git a/src/oops/SOLID/lsp/stack/before/StackWrong.java b/src/oops/SOLID/lsp/stack/before/StackWrong.java index 1170e573..dea9b13f 100644 --- a/src/oops/SOLID/lsp/stack/before/StackWrong.java +++ b/src/oops/SOLID/lsp/stack/before/StackWrong.java @@ -1,6 +1,8 @@ package oops.SOLID.lsp.stack.before; import java.util.ArrayList; +import java.util.List; + /* * Stack is-a list with push() pop() methods. * So can we create a stack by extending an ArrayList class? @@ -14,19 +16,31 @@ * so objects of ArrayList are not fully replaceable by the objects of stack. * */ -public class StackWrong extends ArrayList{ - private int topPointer = 0; - +public class StackWrong{ + private int topPointer; + private List arrLi; + + public StackWrong(){ + this.arrLi = new ArrayList<>(); + this.topPointer = 0; + } + public void push(Integer a) { - add(topPointer, a); + arrLi.add(a); topPointer++; } - public void pop() { - remove(topPointer-1); + public void pop() throws NullPointerException{ + if(topPointer == 0) throw new NullPointerException("No elements in stack"); + arrLi.remove(topPointer-1); topPointer--; } public Integer top() { - return get(topPointer-1); + if(topPointer == 0) throw new NullPointerException("No elements in stack"); + return arrLi.get(topPointer-1); + } + public void clear(){ + arrLi.clear(); + topPointer = 0; } public static void main(String[] args) { diff --git a/src/oops/SOLID/singleResponsibilityPrinciple/before/Employee.java b/src/oops/SOLID/singleResponsibilityPrinciple/before/Employee.java index a742fac0..3e0a949a 100644 --- a/src/oops/SOLID/singleResponsibilityPrinciple/before/Employee.java +++ b/src/oops/SOLID/singleResponsibilityPrinciple/before/Employee.java @@ -1,10 +1,5 @@ package oops.SOLID.singleResponsibilityPrinciple.before; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - /* Models an employee form a business perspective */ @@ -62,33 +57,4 @@ public void setNbHoursPerWeek(int nbHoursPerWeek) { public String getFullName(){ return this.firstName + " " + this.lastName; } - - public void save(){ - try { - Employee employee =this; - StringBuilder sb = new StringBuilder(); - sb.append("### EMPLOYEE RECORD ####"); - sb.append(System.lineSeparator()); - sb.append("NAME: "); - sb.append(employee.firstName + " " + employee.lastName); - sb.append(System.lineSeparator()); - sb.append("POSITION: "); - sb.append(employee.getClass().getTypeName()); - sb.append(System.lineSeparator()); - sb.append("EMAIL: "); - sb.append(employee.getEmail()); - sb.append(System.lineSeparator()); - sb.append("MONTHLY WAGE: "); - sb.append(employee.monthlyIncome); - sb.append(System.lineSeparator()); - - Path path = Paths.get(employee.getFullName() - .replace(" ","_") + ".rec"); - Files.write(path, sb.toString().getBytes()); - - System.out.println("Saved employee " + employee.toString()); - } catch (IOException e){ - System.out.println("ERROR: Could not save employee. " + e); - } - } } diff --git a/src/oops/SOLID/singleResponsibilityPrinciple/before/EmployeeList.java b/src/oops/SOLID/singleResponsibilityPrinciple/before/EmployeeList.java new file mode 100644 index 00000000..4612fe93 --- /dev/null +++ b/src/oops/SOLID/singleResponsibilityPrinciple/before/EmployeeList.java @@ -0,0 +1,24 @@ +package oops.SOLID.singleResponsibilityPrinciple.before; + +import java.util.List; + +public class EmployeeList { + private static EmployeeList instance; + private static List employeeList; + private EmployeeList(){ + + } + + public static EmployeeList getInstance(){ + if(instance == null){ + synchronized (EmployeeList.class){ + if(instance == null) instance = new EmployeeList(); + } + } + return instance; + } + + public List getEmployeeList(){ + return employeeList; + } +} diff --git a/src/oops/SOLID/singleResponsibilityPrinciple/before/EmployeeRepository.java b/src/oops/SOLID/singleResponsibilityPrinciple/before/EmployeeRepository.java index b76f4589..de6c0263 100644 --- a/src/oops/SOLID/singleResponsibilityPrinciple/before/EmployeeRepository.java +++ b/src/oops/SOLID/singleResponsibilityPrinciple/before/EmployeeRepository.java @@ -1,19 +1,51 @@ package oops.SOLID.singleResponsibilityPrinciple.before; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.Arrays; import java.util.List; public class EmployeeRepository { public List findAll(){ - + return EmployeeList.getInstance().getEmployeeList(); // Employees are kept in memory for simplicity - Employee anna = new FullTimeEmployee("Anna Smith", 2000); - Employee billy = new FullTimeEmployee("Billy Leech", 920); + } + + public void saveAll(List empLi){ + for(Employee employee : empLi){ + try { + StringBuilder sb = new StringBuilder(); + sb.append("### EMPLOYEE RECORD ####"); + sb.append(System.lineSeparator()); + sb.append("NAME: "); + sb.append(employee.getFullName()); + sb.append(System.lineSeparator()); + sb.append("POSITION: "); + sb.append(employee.getClass().getTypeName()); + sb.append(System.lineSeparator()); + sb.append("EMAIL: "); + sb.append(employee.getEmail()); + sb.append(System.lineSeparator()); + sb.append("MONTHLY WAGE: "); + sb.append(employee.getMonthlyIncome()); + sb.append(System.lineSeparator()); + + Path path = Paths.get(employee.getFullName() + .replace(" ","_") + ".rec"); + + Files.write(path, sb.toString().getBytes()); + + EmployeeList.getInstance().getEmployeeList().add(employee); + + System.out.println("Saved employee " + employee.toString()); - Employee steve = new PartTimeEmployee("Steve Jones", 800); - Employee magda = new PartTimeEmployee("Magda Iovan", 920); - return Arrays.asList(anna, billy, steve, magda); + } catch (IOException e){ + System.out.println("ERROR: Could not save employee. " + e); + } + } } } \ No newline at end of file diff --git a/src/oops/SOLID/singleResponsibilityPrinciple/before/SaveEmployeesMain.java b/src/oops/SOLID/singleResponsibilityPrinciple/before/SaveEmployeesMain.java index 3e30e5e9..e32090ff 100644 --- a/src/oops/SOLID/singleResponsibilityPrinciple/before/SaveEmployeesMain.java +++ b/src/oops/SOLID/singleResponsibilityPrinciple/before/SaveEmployeesMain.java @@ -5,12 +5,15 @@ public class SaveEmployeesMain { public static void main(String[] args) { // Grab employees + List empLi = List.of(new FullTimeEmployee("Anna Smith", 2000), + new FullTimeEmployee("Billy Leech", 920), + new PartTimeEmployee("Steve Jones", 800), + new PartTimeEmployee("Magda Iovan", 920)); + EmployeeRepository repository = new EmployeeRepository(); List employees = repository.findAll(); // Save all - for (Employee e : employees){ - e.save(); - } + repository.saveAll(empLi); } } \ No newline at end of file