뉴스머신 클래스
// 뉴스머신 클래스
public class NewsMachine implements Publisher{
// 옵저버들을 멤버로 가진다.
private ArrayList<Observer> observers;
private String title;
private String news;
public NewsMachine(){
observers = new ArrayList<>();
}
// 옵저버 추가(구독자 추가)
@Override
public void add(Observer observer) {
observers.add(observer);
}
// 옵저버 삭제(구독자 삭제)
@Override
public void delete(Observer observer) {
int idx = observers.indexOf(observer);
observers.remove(idx);
}
// 구독자에게 알림 == 구독자의 update() 메서드 호출
@Override
public void notifyToObserver() {
// 각 옵저버들에게 새로운 뉴스를 알린다.
for(Observer observer : observers)
observer.update(title, news);
}
// 새로운 뉴스정보 갱신, 외부로부터 가져올 수 있음
// 새로운 뉴스가 생기면 구독자에게 알린다(notifyToObserver)
public void renewNewsInfo(String title, String news){
this.title = title;
this.news = news;
notifyToObserver();
}
public String getTitle(){
return title;
}
public String getNews() {
return news;
}
}
연간 구독자 클래스
// 퍼블리셔로부터 뉴스를 구독받는 연간 구독자 클래스
public class AnnualSubscriber implements Observer{
private String newsString;
private Publisher publisher;
// 옵저버를 생성할 시 관찰 대상 또는 알림을 받을 퍼블리셔에 등록을 요청한다.
public AnnualSubscriber(Publisher publisher){
this.publisher = publisher;
publisher.add(this); // 자신 등록 요청
}
@Override
public void update(String title, String news) {
this.newsString = title + " === " + news;
// 옵저버 자신들의 서로 다른 작업. ex) display()
display();
}
private void display(){
System.out.println("오늘의 뉴스" + newsString);
}
}