728x90
728x90
BIG
전략패턴(strategy pattern)
정책패턴(policy parttern)이라고도 함
객체의 행위를 바꾸고 싶은 경우 직접수정하지 않고 캡슐화해서 컨텍스트 안에서 바꿔주어 상호 교체가 가능하게 만드는 패턴
*컨택스트(context) = 상황, 맥락, 문맥, 개발자가 작업완료시 필요한 관련된 모든정보를 말함
특정한 계열의 알고리즘들을 정의해서 그걸 캡슐화해서 계열안에서 상호교체가 가능하게 만듬
유연하고 재사용가능하게 객체 지향 소프트웨어를 설계하기위해 만들어짐
대표적인 예시가 passport
Passport.js
Simple, unobtrusive authentication for Node.js
www.passportjs.org
옵저버패턴(observer pattern)
- 옵저버 or 리스너 - 객체의 상태변화를 관찰하는 관찰자들을 말함(이벤트를 관찰하는 대상)
- 옵저버패턴 - 옵저버들의 목록을 객체에 등록해 상태변화가 있을때마다 메서드 등을 통해 객체가 옵저버들한테 통지하도록 하는 디자인 패턴
- 분산이벤트 핸들링시스템구현시 많이 사용
- 발행/구독 모델로 알려져있기도함
- mvc패턴에 많이 사용함
- 예시로는 트위터가 있음
실행방식
- 옵저버라는 하나 이상의 객체가 관찰 대상이 되는 객체에 등록시킴
- 옵저버들이 객체가 발생시키는 이벤트를 받아 처리(콜백)
- 파생 옵저버들이 notify함수를 구현해 이벤트가 발생할때 각자의 동작들을 정의해야함
- 계속 등록, 제거가 반복되므로 이벤트에서 순환 실행을 막는 메커니즘을 꼭 필요함
/* 파일명 : EventSource.java */
package obs;
import java.util.Observable; // 이 부분이 옵저버에게 신호를 보내는 주체입니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class EventSource extends Observable implements Runnable
{
public void run()
{
try
{
final InputStreamReader isr = new InputStreamReader( System.in );
final BufferedReader br = new BufferedReader( isr );
while( true )
{
final String response = br.readLine();
setChanged();
notifyObservers( response );
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
/* 파일명: ResponseHandler.java */
package obs;
import java.util.Observable;
import java.util.Observer; /* 여기가 옵저버 */
public class ResponseHandler implements Observer
{
private String resp;
public void update (Observable obj, Object arg)
{
if (arg instanceof String)
{
resp = (String) arg;
System.out.println("\nReceived Response: "+ resp );
}
}
}
/* 파일명 : myapp.java */
/* 여기서부터가 프로그램 시작점 */
package obs;
public class MyApp
{
public static void main(String args[])
{
System.out.println("Enter Text >");
// 이벤트 발행 주체를 생성함 - stdin으로부터 문자열을 입력받음
final EventSource evSrc = new EventSource();
// 옵저버를 생성함
final ResponseHandler respHandler = new ResponseHandler();
// 옵저버가 발행 주체가 발행하는 이벤트를 구독하게 함
evSrc.addObserver( respHandler );
// 이벤트를 발행시키는 쓰레드 시작
Thread thread = new Thread(evSrc);
thread.start();
}
}
이 포스팅은 쿠팡파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
728x90
반응형
BIG
'🥝CS' 카테고리의 다른 글
[ComputerScience]디자인패턴 // MVC 패턴 - 모델,뷰,컨트롤러 패턴 외 패턴 (0) | 2022.08.10 |
---|---|
[ComputerScience]디자인패턴 // 프록시패턴과 프록시서버 (0) | 2022.08.10 |
[ComputerScience]디자인패턴 // 팩토리패턴 (0) | 2022.08.10 |
[ComputerScience]디자인패턴 // 싱글톤패턴 (0) | 2022.08.10 |
[ComputerScience] 라이브러리 vs 프레임워크 (0) | 2022.08.08 |
댓글