Samengesteld ontwerp patroon in Java

De composietstructuur is een van de structurele ontwerppatronen. Het composiet ontwerppatroon wordt gebruikt wanneer we een deel-geheelhiërarchie moeten vertegenwoordigen.

Composiet Ontwerppatroon

Wanneer we een structuur moeten creëren waarin de objecten op dezelfde manier moeten worden behandeld, kunnen we het composiet ontwerppatroon toepassen. Laten we dit begrijpen aan de hand van een voorbeeld uit het echte leven – een diagram is een structuur die bestaat uit objecten zoals een cirkel, lijnen, driehoek, enzovoort. Wanneer we de tekening met kleur vullen (zeg rood), wordt dezelfde kleur ook toegepast op de objecten in de tekening. Hier is de tekening opgebouwd uit verschillende delen en ze hebben allemaal dezelfde bewerkingen. Het composietpatroon bestaat uit de volgende objecten.

  1. Basiscomponent – De basiscomponent is de interface voor alle objecten in de compositie; het clientprogramma gebruikt de basiscomponent om met de objecten in de compositie te werken. Het kan een interface zijn of een abstracte klasse met enkele gemeenschappelijke methoden voor alle objecten.
  2. Blad – Definieert het gedrag voor de elementen in de compositie. Het is het bouwblok voor de compositie en implementeert het basiscomponent. Het heeft geen verwijzingen naar andere componenten.
  3. Samengesteld – Het bestaat uit blad-elementen en implementeert de bewerkingen in het basiscomponent.

Hier pas ik het samengestelde ontwerppatroon toe voor het tekenscenario.

Basiscomponent Samengesteld Patroon

Het basiscomponent van het samengestelde patroon definieert de gemeenschappelijke methoden voor bladeren en composieten. We kunnen een klasse Vorm maken met een methode teken(String vulKleur) om de vorm met de opgegeven kleur te tekenen. Vorm.java

package com.journaldev.design.composite;

public interface Shape {
	
	public void draw(String fillColor);
}

Bladobjecten van het Samengesteld Ontwerppatroon

Het blad van het samengestelde ontwerppatroon implementeert het basiscomponent en dit zijn de bouwstenen voor het composiet. We kunnen meerdere bladobjecten maken zoals Driehoek, Cirkel, enz. Driehoek.java

package com.journaldev.design.composite;

public class Triangle implements Shape {

	@Override
	public void draw(String fillColor) {
		System.out.println("Drawing Triangle with color "+fillColor);
	}

}

Cirkel.java

package com.journaldev.design.composite;

public class Circle implements Shape {

	@Override
	public void draw(String fillColor) {
		System.out.println("Drawing Circle with color "+fillColor);
	}

}

Samenstelling van objecten

A composite object contains group of leaf objects and we should provide some helper methods to add or delete leafs from the group. We can also provide a method to remove all the elements from the group. Drawing.java

package com.journaldev.design.composite;

import java.util.ArrayList;
import java.util.List;

public class Drawing implements Shape{

	//verzameling van Vormen
	private List shapes = new ArrayList();
	
	@Override
	public void draw(String fillColor) {
		for(Shape sh : shapes)
		{
			sh.draw(fillColor);
		}
	}
	
	//vorm toevoegen aan tekening
	public void add(Shape s){
		this.shapes.add(s);
	}
	
	//vorm verwijderen uit tekening
	public void remove(Shape s){
		shapes.remove(s);
	}
	
	//alle vormen verwijderen
	public void clear(){
		System.out.println("Clearing all the shapes from drawing");
		this.shapes.clear();
	}
}

Let op dat een samenstelling ook de component implementeert en zich gedraagt ​​als een blad, behalve dat het een groep blad-elementen kan bevatten. Onze implementatie van het samengestelde patroon is gereed en we kunnen het testen met een clientprogramma.

Clientprogramma voor het samengestelde ontwerppatroon

TestCompositePattern.java

package com.journaldev.design.test;

import com.journaldev.design.composite.Circle;
import com.journaldev.design.composite.Drawing;
import com.journaldev.design.composite.Shape;
import com.journaldev.design.composite.Triangle;

public class TestCompositePattern {

	public static void main(String[] args) {
		Shape tri = new Triangle();
		Shape tri1 = new Triangle();
		Shape cir = new Circle();
		
		Drawing drawing = new Drawing();
		drawing.add(tri1);
		drawing.add(tri1);
		drawing.add(cir);
		
		drawing.draw("Red");
		
		drawing.clear();
		
		drawing.add(tri);
		drawing.add(cir);
		drawing.draw("Green");
	}

}

De output van het bovenstaande clientprogramma voor het samengestelde patroon is:

Drawing Triangle with color Red
Drawing Triangle with color Red
Drawing Circle with color Red
Clearing all the shapes from drawing
Drawing Triangle with color Green
Drawing Circle with color Green

Belangrijke punten van het samengestelde patroon

  • Het samengestelde patroon moet alleen worden toegepast wanneer de groep objecten zich als één object moet gedragen.
  • Het samengestelde ontwerppatroon kan worden gebruikt om een boomachtige structuur te creëren.

java.awt.Container#add(Component) is een geweldig voorbeeld van het samengestelde patroon in Java en wordt veel gebruikt in Swing. Eerdere artikelen over structurele ontwerppatronen:

Source:
https://www.digitalocean.com/community/tutorials/composite-design-pattern-in-java