Составной шаблон проектирования в Java
Композитный шаблон — это один из структурных шаблонов проектирования. Составной шаблон проектирования используется, когда нам нужно представить иерархию часть-целое.
Составной шаблон проектирования
- Базовый компонент. Базовый компонент представляет собой интерфейс для всех объектов в композиции, клиентская программа использует базовый компонент для работы с объектами в композиции. Это может быть интерфейс или абстрактный класс с некоторыми общими для всех объектов методами.
- Листок — определяет поведение элементов в композиции. Он является строительным блоком для композиции и реализует базовый компонент. В нем нет ссылок на другие компоненты.
- Композитный — состоит из листовых элементов и реализует операции базового компонента.
Здесь я применяю составной шаблон проектирования для сценария рисования.
Базовый компонент составного массива
Базовый компонент составного шаблона определяет общие методы для листьев и композитов. Мы можем создать класс Shape
с методом draw(String fillColor)
для рисования фигуры заданным цветом. Shape.java
package com.journaldev.design.composite;
public interface Shape {
public void draw(String fillColor);
}
Объекты-листья шаблона составного проектирования
Лист шаблона композитного дизайна реализует базовый компонент, и они являются строительным блоком для композита. Мы можем создать несколько листовых объектов, таких как треугольник, круг и т. д. Triangle.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);
}
}
Circle.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);
}
}
Составной объект
Составной объект содержит группу конечных объектов, и мы должны предоставить некоторые вспомогательные методы для добавления или удаления листьев из группы. Мы также можем предоставить метод для удаления всех элементов из группы. Рисунок.java
package com.journaldev.design.composite;
import java.util.ArrayList;
import java.util.List;
public class Drawing implements Shape{
//collection of Shapes
private List<Shape> shapes = new ArrayList<Shape>();
@Override
public void draw(String fillColor) {
for(Shape sh : shapes)
{
sh.draw(fillColor);
}
}
//adding shape to drawing
public void add(Shape s){
this.shapes.add(s);
}
//removing shape from drawing
public void remove(Shape s){
shapes.remove(s);
}
//removing all the shapes
public void clear(){
System.out.println("Clearing all the shapes from drawing");
this.shapes.clear();
}
}
Клиентская программа композитного шаблона проектирования
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");
}
}
Вывод вышеуказанной клиентской программы составного шаблона:
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
Важные моменты составного массива
- Составной шаблон следует применять только тогда, когда группа объектов должна вести себя как один объект.
- Композитный шаблон проектирования можно использовать для создания древовидной структуры.
java.awt.Container#add(Component)
— отличный пример шаблона Composite в java, который часто используется в Swing. Более ранние статьи о шаблонах структурного проектирования:
- Шаблон моста в Java
- Шаблон проектирования адаптера в Java