ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Strategy Pattern(전략패턴)
    Java & 배경지식/패턴 2020. 2. 13. 21:18
    반응형

    전략패턴이란?

    자신의 기능 맥락(context)에서 필요에 따라 변경이 필요한 알고리즘을 인터페이스르 통해 통째로 외부로 분리시키고, 이를 구현한 구체적인 알고리즘 클래스를 필요에 따라 바꿔서 사용할 수 있게 하는 디자인 패턴.

     

    쉽게말하면

    다구현해 놓고 클라이언트가 필요에 의해서 필요한 것을 실행시키는 것

     

     

     

    현 직장은 SI 그리고 R&D 중심의 회사다보니 중간에 요구사항 및 새로운 기능들이 추가되는 경우가 매우 많다.

    그래서 핵심코드 관리를 잘하지 못하였으나 위의 전략패턴을 이용하게 된다면 핵심내용의 버전을 관리하거나 추가하기가 매우 편하다는 것을 느껴 아래와 같이 기본적인 뼈대를 만들었다.

    위와같은 구조로 만들었다. 

     

    코드들

    Controller

    @Controller
    public class HomeController {
    
    	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
    
    	@Autowired
    	private Action action;
    	
    	@RequestMapping(value = "/", method = RequestMethod.GET)
    	public String home(Locale locale, Model model) {
    		Pserson pserson = null;
    		action = new Action();
    		pserson = new Eat();
    		action.runAction(pserson, "11");
    		System.out.println("=========================");
    		pserson = new Sleep();
    		action.runAction(pserson, "12");
    		return "home";
    	}
    }

     

    Service 

     

    Context

    @Service
    public class Action {
    	public void runAction(Pserson pserson, String param) {
    		System.out.println("사람 행동 시작");
    		pserson.run(param);
    		System.out.println("사람 행동 끝");
    	}
    }

     

    Strategy

    public interface Pserson {
    	void run(String param);
    }

     

    ConcreteStrategyA

    @Service
    public class Eat implements Pserson{
    	
    	@Autowired
    	TestDao dao = new TestDao();
    	
    	public void run(String param) {
    		System.out.println(param +"시에 이 사람은 밥먹는 중");
    		dao.test();
    	}
    }

     

    ConcreteStrategyB

    @Service
    public class Sleep implements Pserson {
    	@Autowired
    	TestDao dao = new TestDao();
    	public void run(String param) {
    		System.out.println(param+"시에 이 사람은 자는 중");
    		dao.test2();
    	}
    }

     

    DAO

    @Component
    public class TestDao {
    	
    	public void test() {
    		System.out.println("여기는test().@@@@@@@@@@@@@@@@");
    	}
    	public void test2() {
    		System.out.println("여기는test().@@@@@@@@@@@@@@@@");
    	}
    }

     

     

     

    위와같은 구조로 만들었다. 

     

     

     

     

     

    출처

    토비의 스프링

    구글 위키백과

    반응형

    'Java & 배경지식 > 패턴' 카테고리의 다른 글

    프록시 패턴 - 백기선  (0) 2020.06.14
    프록시 패턴  (0) 2020.02.17
    데코레이터 패턴  (0) 2020.02.17
    Session Facade 패턴  (0) 2020.02.10
    Transfer Object 패턴(Value Object)  (0) 2020.02.10
Designed by Tistory.