웹사이트 검색

Java의 복합 디자인 패턴


복합 패턴은 구조 디자인 패턴 중 하나입니다. 복합 디자인 패턴은 부분-전체 계층 구조를 나타내야 할 때 사용됩니다.

복합 디자인 패턴

  1. 기본 구성 요소 - 기본 구성 요소는 컴포지션의 모든 개체에 대한 인터페이스이며 클라이언트 프로그램은 기본 구성 요소를 사용하여 구성의 개체로 작업합니다. 모든 개체에 공통적인 몇 가지 메서드가 있는 인터페이스 또는 추상 클래스일 수 있습니다.
  2. Leaf - 컴포지션의 요소에 대한 동작을 정의합니다. 컴포지션의 빌딩 블록이며 기본 구성 요소를 구현합니다. 다른 구성 요소에 대한 참조가 없습니다.
  3. 컴포지트 - 리프 요소로 구성되며 기본 구성 요소에서 작업을 구현합니다.

여기서는 드로잉 시나리오에 복합 디자인 패턴을 적용하고 있습니다.

복합 패턴 기본 구성 요소

복합 패턴 기본 구성 요소는 리프 및 복합에 대한 일반적인 방법을 정의합니다. draw(String fillColor) 메서드를 사용하여 Shape 클래스를 생성하여 주어진 색상으로 도형을 그릴 수 있습니다. 모양.자바

package com.journaldev.design.composite;

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

복합 디자인 패턴 리프 개체

컴포지트 디자인 패턴 리프는 기본 구성 요소를 구현하며 이들은 컴포지트의 빌딩 블록입니다. Triangle, Circle 등과 같은 여러 리프 개체를 만들 수 있습니다. 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);
	}

}

서클.자바

package com.journaldev.design.composite;

public class Circle implements Shape {

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

}

복합 객체

복합 개체에는 리프 개체 그룹이 포함되어 있으며 그룹에서 리프를 추가하거나 삭제하는 몇 가지 도우미 메서드를 제공해야 합니다. 그룹에서 모든 요소를 제거하는 방법도 제공할 수 있습니다. 드로잉.자바

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)는 Java에서 Composite 패턴의 좋은 예이며 Swing에서 많이 사용됩니다. 이전 구조 디자인 패턴 기사:

  • 자바의 브리지 패턴
  • Java의 어댑터 디자인 패턴