디자인패턴) Composite pattern 간단 정리 및 설명 with Java

Composite pattern 컴포지트 패턴

  • 부분 - 전체 관계를 가지는 객체들을 표현할 때 사용되는 구조(Structural)패턴 입니다.
  • 사용자는 전체와 부분을 구분없이 동일한 인터페이스를 사용하도록 합니다.

   

  • 부분(Leaf)과 전체(Composite)를 포함하는 일반화 클래스(Component)를 정의
  • 전체(Composite)는 여러 개의 Component를 참조함으로써 Composition의 관계를 가집니다.

Computer를 이용한 예시
  •  ILA-ndLLIC0)V-PUCdLUCyJJPV+ RJndwoo eoynetpev•dwoo WISCUd— JUIE•M0d- ㄗ eoq WI(Poud406+
public abstract class ComputerDevice {

    protected int price = 0;
    protected int power = 0;

    public abstract int getPrice();
    public abstract int getPower();

}
public class Body extends ComputerDevice {

    public Body(int priceint power){
        this.price = price;
        this.power = power;
    }

    @Override
    public int getPrice() {
        return this.price;
    }

    @Override
    public int getPower() {
        return this.power;
    }
}

  - 다른 부품들도 같은 형식으로 정의 합니다.

public class Computer extends ComputerDevice {

    private List<ComputerDevicecomponents;

    public Computer(){
        this.components = new ArrayList<>();
    }
    
    public void addComponent(ComputerDevice com){
        this.components.add(com);
    }

    public Boolean removeComponent(ComputerDevice com){
        return this.components.remove(com);
    }

    @Override
    public int getPrice() {
        for(ComputerDevice com : components){
            this.price += com.getPrice();
        }
        return this.price;
    }

    @Override
    public int getPower() {
        for(ComputerDevice com : components){
            this.power += com.getPower();
        }
        return this.power;
    }
}

 - 부품들(부분)을 포함하는 컴퓨터(전체)객체를 정의 합니다.

public class main {
    public static void main(String[] argsthrows IOException{

        Body body = new Body(80100);
        Monitor monitor = new Monitor(20100);
        Keyboard keyboard = new Keyboard(105);
        Mouse mouse = new Mouse(55);

        Computer computer = new Computer();
        computer.addComponent(body);
        computer.addComponent(monitor);
        computer.addComponent(keyboard);
        computer.addComponent(mouse);

        System.out.println(computer.getPrice());
        System.out.println(computer.getPower());
    }
}

댓글

가장 많이 본 글