티스토리 뷰

프로그래밍/디자인패턴

Strategy

DEV LION 2020. 11. 4. 00:00

자주 사용하는 공통적인 기능을 패턴화할 수 있다. 다른 부분은 해당 기능만을 구현하여 삽입한다.

 

1. 객체의 행위를 사전에 정의

2. 행위를 수정하지 않고 전략만 바꿔가며 확장

 

 

1. 객체의 행위를 정의

package com.pattern.strategy;

public interface MessengerStrategy {
    public void send();
}

 

2. 행위를 구현(전략 구현)

package com.pattern.strategy;

public class FcmHttpV1 implements MessengerStrategy {
    @Override
    public void send() {

    }
}
package com.pattern.strategy;

public class FcmAndroid implements MessengerStrategy{
    @Override
    public void send() {

    }
}
package com.pattern.strategy;

public class FcmIos implements MessengerStrategy{
    @Override
    public void send() {

    }
}
package com.pattern.strategy;

public class RestTemplate implements MessengerStrategy{
    @Override
    public void send() {

    }
}

 

3. 전략 삽입 클래스 생성. (전략 setter 함수)

package com.pattern.strategy;

public class Messenger{

    MessengerStrategy strategy;

    public void send(){
        strategy.send();
    }

    public void setMsgStrategy(MessengerStrategy strategy) {
        this.strategy = strategy;
    }
}

 

4. 전략이 빠진 프레임워크를 구현.  (Push, RestApi 등)

package com.pattern.strategy;

public class Push extends Messenger{ }
package com.pattern.strategy;

public class RestApi extends Messenger{ }

 

5. Main

package com.pattern.strategy;

public class StrategyPattern {

    public static void main(String[] args) {

        Messenger push = new Push();

        push.setMsgStrategy(new FcmHttpV1());
        push.send();

        push.setMsgStrategy(new FcmAndroid());
        push.send();

        push.setMsgStrategy(new FcmIos());
        push.send();

        Messenger restApi = new RestApi();
        restApi.setMsgStrategy(new RestTemplate());
        restApi.send();
    }
}
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함