Command Pattern이란?

요구사항(요청, 명령)을 객체로 캡슐화시킵니다. 이를 이용해서 다른 요구사항을 지닌 클라이언트를 매개변수화 시킬 수 있습니다. 말 그대로 리모콘처럼 여러 가지의 명령어를 부여하여 그것을 호출하는 것입니다. 


코드 요약

▶ People 객체는 Command 인터페이스의 List를 가지고 있고 List에는 Calculator의 각각의 기능이 있습니다. List의 인덱스를 호출하여 각각 다른 계산을 이용할 수 있습니다. 


클래스 다이어그램 

 

1. AddCalculator class

public class AddCalculator implements Commend{
    @Override
    public double execute(double n1, double n2) {
        return n1+n2;
    }
}

 

2. MinusCalculator class

public class MinusCalculator implements Commend{
    @Override
    public double execute(double n1, double n2) {
        return n1-n2;
    }
}

 

3. Commend interface

public interface Commend {
    double execute(double n1, double n2);
}

 

4. People class

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

public class People {

    List<Commend> commendList = new ArrayList<>();

    public void addCommend(Commend commend) {
        commendList.add(commend);
    }

    public double execute(int index, double n1, double n2){
        return commendList.get(index).execute(n1,n2);
    }
}

 

5. Main class


public class Main {
    public static void main(String[] args) {
        MinusCalculator minusCalculator = new MinusCalculator();
        AddCalculator addCalculator = new AddCalculator();

        People people = new People();
        // 0 번째 index 에 minus 계산기 명령어를 수행하는 객체 추가
        people.addCommend(minusCalculator);

        // 1 번째 index 에 add 계산기 명령어를 수행하는 객체 추가
        people.addCommend(addCalculator);

        // minus 계산기 사용
        double result1 = people.execute(0, 1, 2);

        // add 계산기 사용
        double result2 = people.execute(1, 1, 2);

        System.out.println(result1);
        System.out.println(result2);
    }
}

 

이처럼 각각의 명령에 따라 다른 역할을 수행하도록 하는 것이 Command Pattern입니다. 읽어주셔서 감사합니다. 

전체 코드는 아래에서 확인 가능합니다:)

https://github.com/rlaehdals/design-pattern

 

GitHub - rlaehdals/design-pattern

Contribute to rlaehdals/design-pattern development by creating an account on GitHub.

github.com