Skip to content

Instantly share code, notes, and snippets.

@devrath
Created April 24, 2022 10:40
Show Gist options
  • Select an option

  • Save devrath/dbc676adf08012a8394bd121be8096fa to your computer and use it in GitHub Desktop.

Select an option

Save devrath/dbc676adf08012a8394bd121be8096fa to your computer and use it in GitHub Desktop.
This snippet represents the composite design pattern
public class CategoryDramaMoviesFolder implements FolderDetailsComponent {
@Override
public void printFolderDetails() {
System.out.println("Folder Details: Category drama movies");
}
}
public class GamesFolder implements FolderDetailsComponent {
@Override
public void printFolderDetails() {
System.out.println("Folder Details: Game's");
}
}
public class JurassicParkMovie implements FolderDetailsComponent {
@Override
public void printFolderDetails() {
System.out.println("File Details: Jurassic Park");
}
}
public class MovieDemo {
public static void main(String[] args){
// Parent
ParentFolder parentFolder = new ParentFolder();
// First level children
SoftwaresFolder softFolder = new SoftwaresFolder();
MoviesFolder moviesFolder = new MoviesFolder();
GamesFolder gamesFolder = new GamesFolder();
// Second level children
JurassicParkMovie jurassicParkMovieFile = new JurassicParkMovie();
CategoryDramaMoviesFolder categoryDramaMoviesFolder = new CategoryDramaMoviesFolder();
// Add second level children
moviesFolder.addItems(jurassicParkMovieFile);
moviesFolder.addItems(categoryDramaMoviesFolder);
// Add first level children
parentFolder.add(softFolder);
parentFolder.add(moviesFolder);
parentFolder.add(gamesFolder);
// Initiate print
parentFolder.printFolderDetails();
}
}
public class MoviesFolder implements FolderDetailsComponent {
private ArrayList<FolderDetailsComponent> comp = new ArrayList<>();
public void addItems(FolderDetailsComponent component) {
comp.add(component);
}
@Override
public void printFolderDetails() {
System.out.println("Folder Details: Movie's");
for(FolderDetailsComponent component : comp){
component.printFolderDetails();
}
}
}
public class ParentFolder implements FolderDetailsComponent {
ArrayList<FolderDetailsComponent> comp = new ArrayList<>();
public void add(FolderDetailsComponent component){
comp.add(component);
}
@Override
public void printFolderDetails() {
System.out.println("Folder Details: Parent Folder");
for (FolderDetailsComponent component: comp) {
component.printFolderDetails();
}
}
}
public class SoftwaresFolder implements FolderDetailsComponent {
@Override
public void printFolderDetails() {
System.out.println("Folder Details: Software's");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment