[CS] 전략 패턴(strategy pattern, 정책 패턴(policy pattern)CS/CS2022. 9. 20. 21:56
Table of Contents
전략 패턴(strategy pattern)이란?
- 객체의 행위를 바꾸고 싶은 경우 '직접 수정하지 않고' 전략이라고 부르는 '캡슐화한 알고리즘'을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴.
더보기
컨텍스트 :
프로그래밍에서 상황, 맥락, 문맥을 의미하며 개발자가 어떤 작업을 완료하는데 필요한 모든 관련정보를 말함.
//전략 패턴 예시 변화되는 로봇의 이동방식, 공격방식을 캡슐화 하여 필요할 때마다 변경이 가능하게 함.
// 로봇 클래스
public abstract class Robot {
private String name;
private MovingStrategy movingStrategy;
private AttackStrategy attackStrategy;
public Robot(String name) {
this.name = name;
}
public void move() {
movingStrategy.move();
}
public void attack() {
attackStrategy.attack();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public MovingStrategy getMovingStrategy() {
return movingStrategy;
}
public void setMovingStrategy(MovingStrategy movingStrategy) {
this.movingStrategy = movingStrategy;
}
public AttackStrategy getAttackStrategy() {
return attackStrategy;
}
public void setAttackStrategy(AttackStrategy attackStrategy) {
this.attackStrategy = attackStrategy;
}
}
// 아톰 클래스 : 로봇 클래스 상속
public class Atom extends Robot{
public Atom(String name) {
super(name);
}
}
// 태권브이 클래스 : 로봇 클래스 상속
public class TaekwonV extends Robot{
public TaekwonV(String name) {
super(name);
}
}
// 공격 인터페이스
public interface AttackStrategy {
public void attack();
}
// 펀치 공격 클래스 : 공격 인터페이스 구현
public class PunchStrategy implements AttackStrategy {
@Override
public void attack() {
System.out.println("I have strong punch and can attack with it.");
}
}
// 미사일 공격 클래스 : 공격 인터페이스 구현
public class MissileStrategy implements AttackStrategy {
@Override
public void attack() {
System.out.println("I have Missile and can attack with it.");
}
}
// 이동 인터페이스
public interface MovingStrategy {
public void move();
}
// 걷기 이동 클래스 : 이동 인터페이스 구현
public class WalkingStrategy implements MovingStrategy {
@Override
public void move() {
System.out.println("I can only walk.");
}
}
// 하늘 이동 클래스 : 이동 인터페이스 구현
public class FlyingStrategy implements MovingStrategy {
@Override
public void move() {
System.out.println("I can fly.");
}
}
// 실행 클래스
public class Client {
public static void main(String[] args) {
Robot taekwonV = new TaekwonV("TaekwonV"); // 태권 브이 객체 생성
Robot atom = new Atom("Atom"); // 아톰 객체 생성
taekwonV.setMovingStrategy(new WalkingStrategy()); // 이동 전략 설정 : 걷기
taekwonV.setAttackStrategy(new MissileStrategy()); // 공격 전략 설정 : 미사일
atom.setMovingStrategy(new FlyingStrategy()); // 이동 전략 설정 : 날기
atom.setAttackStrategy(new PunchStrategy()); // 공격 전략 설정 : 펀치
System.out.println("My name is " + taekwonV.getName());
taekwonV.move();
taekwonV.attack();
System.out.println("My name is " + atom.getName());
atom.move();
atom.attack();
}
}
'CS > CS' 카테고리의 다른 글
[CS] 노출모듈 패턴, MVC 패턴, MVP 패턴, MVVM 패턴 (0) | 2022.09.20 |
---|---|
[CS] 싱글톤 패턴(singleton pattern) (1) | 2022.09.20 |
[CS] 프록시 패턴(proxy pattern) (1) | 2022.09.20 |
[CS] 이터레이터 패턴(iterator pattern) (0) | 2022.09.20 |
[CS] 프로그래밍 패러다임(Programming paradigm) (0) | 2022.09.20 |
@Yanako :: Yana's coding story였는데요, 우당탕탕 개발일지가 맞는것같
야나의 코딩 일기장 :) #코딩블로그 #기술블로그 #코딩 #조금씩,꾸준히
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!