반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 팩토리패턴
- TCP/IP 4계층
- 기본형 매개변수
- 참조형 반환타입
- 쇠막대기
- 빈 타입 조회
- try-catch
- 참조형 매개변수
- 스프링
- 백준 1935
- 후위표기식
- 팩토리 패턴
- www.naver.com치면 발생하는일
- 싱글톤 패턴
- 스프링 컨테이너
- 백준 2164
- 전략 패턴
- 옵저버 패턴
- SOLID원칙
- 스프링 빈
- mvvm패턴
- k번째큰수
- 리버스 프록시
- removeAll
- 스프링 싱글톤
- 네트워크
- @Tranctional
- 포워드 프록시
- Class Loader
- 자바의 면접
Archives
- Today
- Total
스파이더 웹 개발
옵저버 패턴 본문
728x90
반응형
- 옵저버 패턴은 주체가 어떤 객체의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 메서드 등을 통해 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 디자인 패턴
- 또한, 옵저버 패턴은 주로 이벤트 기반 시스템에 사용하며, MVC 패턴에도 사용한다
//옵저버 패턴
package book.designpattern;
import java.util.ArrayList;
import java.util.List;
interface Subject {
public void register(Observer obj);
public void unregister(Observer obj);
public void notifyObserver();
public Object getUpdate(Observer obj);
}
interface Observer{
public void update();
}
class Topic implements Subject{
private List<Observer> observers;
private String message;
public Topic(){
this.observers = new ArrayList<>();
this.message = "";
}
@Override
public void register(Observer obj) {
if(!observers.contains(obj)) observers.add(obj);
}
@Override
public void unregister(Observer obj) {
observers.remove(obj);
}
@Override
public void notifyObserver() {
this.observers.forEach(Observer::update);
}
@Override
public Object getUpdate(Observer obj) {
return this.message;
}
public void postMessage(String msg){
System.out.println("메시지 발송 : " + msg);
this.message = msg;
notifyObserver();
}
}
class TopicSubscriber implements Observer {
private String name;
private Subject topic;
public TopicSubscriber(String name, Subject topic){
this.name = name;
this.topic = topic;
}
@Override
public void update() {
String msg =(String) topic.getUpdate(this);
System.out.println(name + ":: got message >> " + msg);
}
}
public class ObserverClass {
public static void main(String[] args) {
Topic topic = new Topic();
Observer a = new TopicSubscriber("a", topic);
Observer b = new TopicSubscriber("b", topic);
Observer c = new TopicSubscriber("c", topic);
topic.register(a);
topic.register(b);
topic.register(c);
topic.postMessage("고루고루고루마존!");
}
}
상속 과 구현
상속
- 상속은 자식 클래스가 부모 클래스의 메서드 등을 상속 받아 사용하며, 자식클래스에서 추가 및 확장을 할 수 있는 것을 말합니다. 이로 인해 재사용성, 중복의 최소화가 이루어진다
구현
- 상속과는 달리 반드시 부모클래스의 메서드를 재정의하여 구현해야 한다(강제성)
- 구현은 부모 인터페이스를 자식 클래스에서 재정의하여 구현하는 것을 말한다.
상속과 구현의 차이
- 상속은 일반 클래스, abstract 클래스(추상 클래스)를 기반으로 구현하며, 구현은 인터페이스를 기반으로 구현한다
728x90
반응형
Comments