[행위 패턴] Observer pattern (옵저버 패턴)
상태가 변경되면 다른 객체들한테 연락을 돌릴 수 있게 한다.
(원본 출처 : https://www.tutorialspoint.com/design_pattern/design_pattern_quick_guide.htm)
관찰자 패턴은 한 객체가 수정되고 종속 객체가 자동으로 통보 될 때와 같이 객체간에 일대일 관계가있을 때 사용됩니다. 옵서버 패턴은 행동 패턴 카테고리에 속합니다.
Implementation
옵서버 패턴은 3 개의 액터 클래스를 사용합니다. 주제, 옵서버 및 클라이언트. 제목, 관찰자를 클라이언트 객체에 첨부 및 분리하는 메소드가있는 객체입니다. Subject 클래스, Observer 추상 클래스 및 Observer 추상 클래스를 확장하는 구체적인 클래스를 작성했습니다.
ObserverPatternDemo, 우리 데모 클래스는 Subject와 concrete 클래스 객체를 사용하여 관찰자 패턴을 실제로 보여줍니다.
Step 1
Subject 클래스를 만듭니다.
Subject.java
import java.util.ArrayList; import java.util.List; public class Subject { private List<Observer> observers = new ArrayList<Observer>(); private int state; public int getState() { return state; } public void setState(int state) { this.state = state; notifyAllObservers(); } public void attach(Observer observer){ observers.add(observer); } public void notifyAllObservers(){ for (Observer observer : observers) { observer.update(); } } }
Step 2
Observer 클래스를 만듭니다.
Observer.java
public abstract class Observer { protected Subject subject; public abstract void update(); }
Step 3
Observer 클래스를 구체화한 클래스를 만듭니다.
BinaryObserver.java
public class BinaryObserver extends Observer{ public BinaryObserver(Subject subject){ this.subject = subject; this.subject.attach(this); } @Override public void update() { System.out.println( "Binary String: " + Integer.toBinaryString( subject.getState() ) ); } }
OctalObserver.java
public class OctalObserver extends Observer{ public OctalObserver(Subject subject){ this.subject = subject; this.subject.attach(this); } @Override public void update() { System.out.println( "Octal String: " + Integer.toOctalString( subject.getState() ) ); } }
HexaObserver.java
public class HexaObserver extends Observer{ public HexaObserver(Subject subject){ this.subject = subject; this.subject.attach(this); } @Override public void update() { System.out.println( "Hex String: " + Integer.toHexString( subject.getState() ).toUpperCase() ); } }
Step 4
주체 및 구체적인 관찰자 개체를 사용합니다.
ObserverPatternDemo.java
public class ObserverPatternDemo { public static void main(String[] args) { Subject subject = new Subject(); new HexaObserver(subject); new OctalObserver(subject); new BinaryObserver(subject); System.out.println("First state change: 15"); subject.setState(15); System.out.println("Second state change: 10"); subject.setState(10); } }
Step 5
결과를 확인합니다.
First state change: 15 Hex String: F Octal String: 17 Binary String: 1111 Second state change: 10 Hex String: A Octal String: 12 Binary String: 1010
'Development > Java' 카테고리의 다른 글
[생성 패턴] Factory pattern (팩토리 패턴) (0) | 2017.03.26 |
---|---|
[구조 패턴] Decorator pattern (데코레이터 패턴) (0) | 2017.03.26 |
[행위 패턴] Template Method pattern (템플릿 메소드 패턴) (0) | 2017.03.12 |
[구조 패턴] Adapter pattern (어댑터 패턴) (0) | 2017.03.12 |
[행위 패턴] Strategy pattern (전략 패턴) (0) | 2017.03.12 |