Skip to content

Commit 2ce82c1

Browse files
committed
Composite design pattern - AFTER IMPLEMENTATION CODE
1 parent 0cf88fd commit 2ce82c1

2 files changed

Lines changed: 111 additions & 11 deletions

File tree

pattern/src/com/premaseem/Client.java

Lines changed: 65 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,74 @@ public class Client {
1313
public static void main (String[] args) {
1414
System.out.println(" Composite Design Pattern Organizational Tree");
1515

16-
ManagerEmployee managerEmployee = new ManagerEmployee("Aseem");
17-
ManagerEmployee managerEmployee1 = new ManagerEmployee("Kinesh");
18-
ManagerEmployee managerEmployee2 = new ManagerEmployee("Karteek");
16+
// Treating all employees in uniform way ( no discrimination )
17+
Employee CTO = new Employee("Aseem",1);
1918

20-
NonManagerEmployee nonManagerEmployee1 = new NonManagerEmployee("Ash");
21-
NonManagerEmployee nonManagerEmployee2 = new NonManagerEmployee("Amy");
19+
Employee level_1_1 = new Employee("Kinesh",2);
20+
Employee level_1_2 = new Employee("Karteek",3);
21+
Employee level_1_3 = new Employee("Ash",4);
2222

23-
Map managerEmployees = new HashMap();
24-
managerEmployees.put(managerEmployee,managerEmployee1);
25-
managerEmployees.put(managerEmployee1,managerEmployee2);
26-
managerEmployees.put(managerEmployee,nonManagerEmployee1);
27-
managerEmployees.put(managerEmployee,nonManagerEmployee2);
23+
Employee level_2_1 = new Employee("Amy",5);
24+
Employee level_2_2 = new Employee("Courty",6);
25+
Employee level_2_3 = new Employee("Jackson",7);
26+
Employee level_2_4 = new Employee("Leticia",8);
2827

29-
System.out.println(managerEmployees);
28+
Employee level_3_1 = new Employee("Peter",9);
29+
Employee level_3_2 = new Employee("Jodi",10);
30+
Employee level_3_3 = new Employee("William",11);
31+
Employee level_3_4 = new Employee("Darly",12);
32+
33+
// Using tree structure in natural way with Leaf and branch
34+
CTO.addSubordinate(level_1_1);
35+
CTO.addSubordinate(level_1_2);
36+
CTO.addSubordinate(level_1_3);
37+
38+
// adding level 1 subordinates in tree
39+
level_1_1.addSubordinate(level_2_1);
40+
level_1_1.addSubordinate(level_2_2);
41+
42+
level_1_2.addSubordinate(level_2_3);
43+
level_1_2.addSubordinate(level_2_4);
44+
45+
// adding level 2 subordinates in tree
46+
level_2_2.addSubordinate(level_3_1);
47+
level_2_2.addSubordinate(level_3_2);
48+
49+
level_2_3.addSubordinate(level_3_3);
50+
level_2_3.addSubordinate(level_3_4);
51+
52+
// Manager details
53+
System.out.println("Details of Leaf - Non Manager");
54+
level_2_2.showEmployeeDetails();
55+
56+
57+
// Non Manager details
58+
System.out.println("Details of Branch - Manager");
59+
level_3_1.showEmployeeDetails();
60+
61+
System.out.println("Details of full tree / entire organization ");
62+
CTO.showEmployeeDetails();
63+
64+
65+
66+
/* OLD discarded code */
67+
68+
// ManagerEmployee managerEmployee = new ManagerEmployee("Aseem");
69+
// ManagerEmployee managerEmployee1 = new ManagerEmployee("Kinesh");
70+
// ManagerEmployee managerEmployee2 = new ManagerEmployee("Karteek");
71+
//
72+
// NonManagerEmployee nonManagerEmployee1 = new NonManagerEmployee("Ash");
73+
// NonManagerEmployee nonManagerEmployee2 = new NonManagerEmployee("Amy");
74+
//
75+
// Map managerEmployees = new HashMap();
76+
// // Manager can have another manager under him
77+
// managerEmployees.put(managerEmployee,managerEmployee1);
78+
// // Manager can have non manager under him
79+
// managerEmployees.put(managerEmployee,nonManagerEmployee1);
80+
// managerEmployees.put(managerEmployee,nonManagerEmployee2);
81+
// managerEmployees.put(managerEmployee1,managerEmployee2);
82+
//
83+
// System.out.println(managerEmployees);
3084

3185
}
3286
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.premaseem;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
/*
7+
@author: Aseem Jain
8+
@title: Design Patterns with Java 9
9+
@link: https://premaseem.wordpress.com/category/computers/design-patterns/
10+
*/
11+
public class Employee {
12+
private String empName;
13+
private Integer empId;
14+
15+
// Composition of same object type
16+
private List<Employee> subordinateEmployee = new ArrayList<>();
17+
18+
public Employee (String empName, Integer empId) {
19+
this.empName = empName;
20+
this.empId = empId;
21+
}
22+
23+
public void addSubordinate(Employee emp){
24+
subordinateEmployee.add(emp);
25+
}
26+
27+
public void removeSubordinate(Employee emp){
28+
subordinateEmployee.remove(emp);
29+
}
30+
31+
public void showEmployeeDetails(){
32+
33+
System.out.println(toString());
34+
}
35+
36+
@Override
37+
public String toString () {
38+
String node = subordinateEmployee.size() == 0 ? "No subordinates" : subordinateEmployee.toString();
39+
String level = subordinateEmployee.size() == 0 ? "Non Manger" : "Manager ";
40+
41+
return "\n"+ level +" {" +
42+
"empName='" + empName + '\'' +
43+
", subordinates =" + node +
44+
"}";
45+
}
46+
}

0 commit comments

Comments
 (0)