In this post, We will talk and learn about the Composite Design Pattern in Java.
Key Points About Composite Design Pattern :
When we want to create a structure in a way that the objects in the structure have to be treated the same way then we can apply a composite design pattern.
We can break the pattern down into:
- component – is the base interface for all the objects in the composition. It should be either an interface or an abstract class with the common methods to manage the child composites.
- Leaf – implements the default behavior of the base component. It doesn’t contain a reference to the other objects.
- Composite – It has leaf elements. It implements the base component methods and defines the child-related operations.
- Client – It has access to the composition elements by using the base component object.
Composite Design Pattern in JDK:
Now Let’s move towards the implementation of the Composite Design Pattern.
Below is the complete source code:
Service.java
1 2 3 4 5 6 7 8 |
package com.kkjavatutorials.composite.component; /** * @author KK JavaTutorials *Service Contract for composite object */ public interface Service { public abstract void service(String serviceType); } |
AdminService.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
package com.kkjavatutorials.composite.component.leaf; import com.kkjavatutorials.composite.component.Service; /** * @author KK JavaTutorials *This Service is only valid for Admin */ public class AdminService implements Service { @Override public void service(String serviceType) { System.out.println(serviceType+ " for Admin"); } } |
EmployeeService.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
package com.kkjavatutorials.composite.component.leaf; import com.kkjavatutorials.composite.component.Service; /** * @author KK JavaTutorials *This Service is only valid for Employee */ public class EmployeeService implements Service { @Override public void service(String serviceType) { System.out.println(serviceType+" for Employee"); } } |
ServiceProvider.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
package com.kkjavatutorials.composites; import java.util.ArrayList; import java.util.List; import com.kkjavatutorials.composite.component.Service; /** * @author KK JavaTutorials * Class provided functionality * to perform action on Composite Object */ public class ServiceProvider implements Service{ private List<Service> serviceList = new ArrayList<>(); @Override public void service(String serviceType) { for (Service service : serviceList) { service.service(serviceType); } } public void addService(Service service) { serviceList.add(service); } public void deleteService(Service service) { serviceList.remove(service); } public void clearServices() { serviceList.clear(); } } |
ClientTest.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
package com.kkjavatutorials.client; import com.kkjavatutorials.composite.component.Service; import com.kkjavatutorials.composite.component.leaf.AdminService; import com.kkjavatutorials.composite.component.leaf.EmployeeService; import com.kkjavatutorials.composites.ServiceProvider; /** * @author KK JavaTutorials *Client program using Composite Design Pattern */ public class ClientTest { public static void main(String[] args){ Service employeeService1 = new EmployeeService(); Service employeeService2 = new EmployeeService(); Service adminService3 = new AdminService(); ServiceProvider serviceProvider = new ServiceProvider(); serviceProvider.addService(employeeService1); serviceProvider.addService(employeeService2); serviceProvider.addService(adminService3); serviceProvider.service("Registration Service"); serviceProvider.deleteService(employeeService1); serviceProvider.addService(new AdminService()); System.out.println("------------------------------"); serviceProvider.service("Logout Service"); serviceProvider.clearServices(); System.out.println("------------------------------"); serviceProvider.addService(employeeService1); serviceProvider.service("Update Service"); } } |
Output of this client Program:
Registration Service for Employee
Registration Service for Employee
Registration Service for Admin
——————————
Logout Service for Employee
Logout Service for Admin
Logout Service for Admin
——————————
Update Service for Employee
You May Also Like:
Singleton Design Pattern in java
Prototype Pattern in Java
Factory Pattern in Java
Abstract Factory Pattern in Java
Builder Pattern in Java
Adapter Design Pattern in Java
Decorator Design Pattern in Java
Facade Design Pattern in Java
Proxy Design Pattern in Java
That’s all about the Composite Design Pattern in Java.
If you have any feedback or suggestion please feel free to drop in below comment box.