Thursday, April 18, 2024
HomeJavaLearn how to use Composite Design Sample in Java? Instance Tutorial

Learn how to use Composite Design Sample in Java? Instance Tutorial


Hi there Java Programmers, if you wish to find out about Composite Design patterns
in Java, like learn how to implement Composite design sample and when to make use of it
then you have got come to the correct place. Earlier, I’ve shared the
finest Java design sample programs
and on this article, I’m going to speak about Composite design Patterns, one
of the 24 GOF patterns described within the traditional
Object Oriented design sample e book.  Composite Design Sample is a
behavioral design sample from GOF, first described of their traditional
e book design sample. The composite sample lets you construct a construction as
a tree, which incorporates each leaf and composites

A leaf is an Object, equivalent to a leaf node in Tree, which does not
comprise one other object, whereas the Composite object incorporates different composites
or leaves. One of the crucial highly effective options of this design sample is that
you possibly can take care of each leaf and composite in the identical method. 

For instance, you have got a company chart that incorporates each worker in
hierarchical order.  Some Workers are Managers they usually comprise
the reference to different workers who report back to them.  If it’s essential to
print all direct for a listing of workers, you can’t do that with out checking
if a selected Worker is a Supervisor or not.


One method to take away this verify is by utilizing the Composite sample,
which permits treating each regular workers and managers in the identical method,
and that is what you will notice on this tutorial. We are going to use precisely this
instance to implement the Composite Design Sample in Java. 

Btw, if you wish to grasp Object-Oriented Design Sample in Java then I
extremely advocate 
Design Patterns in Java course
by Dmitri Nestruk on Udemy. This is among the finest design sample programs to
study the fashionable implementation of traditional design patterns in Java. You’ll
not solely discover ways to acknowledge and apply design patterns but in addition learn how to
Refactor current designs to make use of patterns for higher code high quality. 

What’s Composite Design Sample? An Instance

Right here is an instance of the Composite sample in Java. Right here we’ve used the
Composite sample to characterize workers in a company. Right here some
workers are Managers, who’re the composite objects as a result of they comprise the
reference to different workers who report back to them. 

If we have to print directs(workers who report back to him) for a listing of
workers, we cannot do that with out checking if this worker is a Supervisor
or not. One method to take away this verify is by utilizing the Composite sample, which
permits treating each regular workers and managers in the identical method.

In composite design sample, we’ve a Element object, which defines a
technique for each leaf and composite objects, on this instance it’s Worker,
who has strategies like
add(Worker e),
take away(Worker e) in addition to
regular strategies like getId(),
getName().

In our instance, Worker is an
summary class, to offer a default implementation for a lot of the strategies
and it has two concrete subclasses
Developer and
Supervisor.

Supervisor overrides directs() technique
to return a listing of Workers, who stories to him, whereas developer simply
returns an empty checklist, which can be a superb instance of avoiding
NullPointerException utilizing null
object sample.  

Composite Design Pattern in Java  [ Real world Example]

And, if you happen to discover the Educative platform and their Grokking programs like
Grokking the System Design Interview, Grokking the Object-Oriented Programming
interview then contemplate getting an
Educative Subscription

which offers entry to their 250+ programs for simply $14.9 per thirty days. It is
very cost-effective and nice for getting ready for coding interviews. 

And, right here is the whole code for this instance

Worker.java

import java.util.Record;

public summary class Worker {
  protected int id;
  protected String identify;

  public Worker(int id, String identify) {
    this.id = id;
    this.identify = identify;
  }

  public int getId() {
    return id;
  }

  public String getName() {
    return identify;
  }

  public void add(Worker e) {
    throw new UnsupportedOperationException();
  }

  public void take away(Worker e) {
    throw new UnsupportedOperationException();
  }

  public Worker getChild(int i) {
    throw new UnsupportedOperationException();
  }

  public Record<Worker> directs() {
    throw new UnsupportedOperationException();
  }

  @Override
  public String toString() {
    return String.format("%s: %d", identify, id);
  }
}

Developer.java (Leaf object)

import java.util.Collections;
import java.util.Record;

public class Developer extends Worker {
  public Developer(int id, String identify) {
    tremendous(id, identify);
  }

  @Override
  public Record<Worker> directs() {
    return Collections.EMPTY_LIST;
  }
}

Supervisor.java

import java.util.ArrayList;
import java.util.Record;

public class Supervisor extends Worker {
  non-public Record<Worker> directs = new ArrayList<>();

  public Supervisor(int id, String identify) {
    tremendous(id, identify);
  }

  @Override
  public void add(Worker e) {
    directs.add(e);
  }

  @Override
  public void take away(Worker e) {
    directs.add(e);
  }

  @Override
  public Worker getChild(int i) {
    return directs.get(i);
  }

  @Override
  public Record<Worker> directs() {
    return directs;
  }
}

CompositePattern.java

import java.util.ArrayList;
import java.util.Record;

/**
 * Java Program to show how Composite design sample works internally.
 * 
 * @writer Javarevisited
 *
 */
public class CompositePatternTest {

  public static void important(String args[]) {

    // making a bunch of builders
    Developer john = new Developer(101, "John");
    Developer robin = new Developer(102, "Robin");
    Developer peter = new Developer(103, "Peter");
    Developer luke = new Developer(104, "Luke");
    Developer amy = new Developer(105, "Amy");

    // making a supervisor and including builders below him
    Supervisor steve = new Supervisor(106, "Steve");
    steve.add(john);
    steve.add(robin);
    steve.add(peter);

    // creating one other supervisor and including his directs
    Supervisor frank = new Supervisor(107, "Frank");
    frank.add(luke);
    frank.add(amy);
    frank.add(steve);

    // creating a listing of Worker
    Record<Worker> org = new ArrayList<>();
    org.add(john);
    org.add(robin);
    org.add(peter);
    org.add(luke);
    org.add(amy);
    org.add(steve);
    org.add(frank);

    // iterating over all workers
    for (Worker e : org) {
      System.out.printf("%s manages %s %n", e.getName(), e.directs());
    }
  }
}

Output
John manages []
Robin manages []
Peter manages []
Luke manages []
Amy manages []
Steve manages [John: 101, Robin: 102, Peter: 103]
Frank manages [Luke: 104, Amy: 105, Steve: 106]

You possibly can see that
the code which operates on the Record of workers is freed from the conditional
verify

earlier than calling
directs()
technique. You can too use this sample to print an org chart, the place every
Supervisor is liable for printing its reporters, to speak messages to
every worker by defining a
obtain()
technique, the place every Supervisor will talk it additional to his directs.

When to make use of Composite design Sample in Java?

It is best to think about using a Composite sample if you have got a hierarchical or tree-like construction
like workers in Group, relations in a dynasty, nodes in an XML
doc, and so forth.

One other key factor to recollect to seek out the utilization of
Composite sample is the usage of
instanceof operator
in case you are receiving an object and as an alternative of straight calling a technique on it,
checking for a particular sort, then Composite is a method to deal with them
uniformly.

As on this instance, if we have to name
directs() technique on Worker, we
may do this by checking every worker instanceof Supervisor code. The
composite sample lets you deal with each leaf objects and composite in a
uniform method.

It is a helpful sample and might simplify your code on many events. If
you want extra examples or need to study extra about Composite and different
Object-Oriented Design Sample in Java then you can too try
the Design Patterns in Java course on Udemy, among the best programs to find fashionable implementations of traditional
design patterns in Java. 

Here’s a good UML diagram of Composite Sample which can make it easier to to
perceive this sample higher.

composite design pattern explained with UML diagram


That is all about what’s the Composite design sample in Java. You’ve
not solely realized learn how to implement composite design patterns in Java but in addition
when to make use of Composite patterns and the professionals and cons of Composite patterns.
It is one of many utilization patterns on a Java developer’s design sample armory.

As we’ve seen, one of many key benefits of this sample is straightforward and
readable code, which is feasible due to treating composite and node
objects similarly.

This similar characteristic can be it is the largest drawback as a result of it permits a
consumer to name composite strategies on a node object, which aren’t meant to be
known as or do not have legitimate habits. As with all design resolution, one has to
dwell with this trade-off, if the benefit of composite sample outweighs the
threat of incorrect technique calls.

Different Java Design Patterns tutorials chances are you’ll like

  • 5 Free Programs to study Object Oriented Programming (programs)
  • Learn how to design a Merchandising Machine in Java? (questions)
  • Learn how to implement a Decorator design sample in Java? (tutorial)
  • Learn how to use Manufacturing unit technique design sample in Java? (tutorial)
  • When to make use of Command Design Sample in Java (instance)
  • 7 Greatest Programs to study Design Sample in Java (programs)
  • Learn how to create thread-safe Singleton in Java (instance)
  • Distinction between Manufacturing unit and Summary Manufacturing unit Sample? (instance)
  • 7 Greatest Books to study the Design Sample in Java? (books)
  • Learn how to implement the Technique Design Sample in Java? (instance)
  • Distinction between Manufacturing unit and Dependency Injection Sample? (reply)
  • 18 Java Design Sample Interview Questions with Solutions (checklist)
  • Distinction between State and Technique Design Sample in Java? (reply)
  • 20 System Design Interview Questions (checklist)
  • 10 OOP Design Precept Each Java developer ought to study (stable precept)
  • 5 Free Programs to study Knowledge Construction and Algorithms (programs)
  • 7 Books to study System Design for Newbies (System design books)

Thanks rather a lot for studying this text thus far. If you happen to like my clarification of
the Composite design sample in Java and discover this text price your time
then please share it with your pals and colleagues. If in case you have any
questions or suggestions then please drop a word.

P. S. – If you’re an skilled Java programmer and need to study
Design patterns and in search of a free on-line coaching course to start out with
then you can too try this
Java Design Sample and Structure free course
on Udemy. It is utterly free and also you simply want a free Udemy account to hitch
this course.



RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments