디자인 패턴

Observer Pattern - 행위

iksadnorth 2023. 7. 19. 16:30

👣 문제 상황

특정 그룹의 객체들에게 일괄적으로 특정 행위를 하게 만들어야 할 때, 사용함.
예를 들어, 트위터에서 트윗을 작성하면 팔로워들의 피드에 해당 트윗을 띄워야 함.

목적 : 객체 그룹의 특정 행위 실행.

👣 해결 방법

public interface Publisher {
	public void add(Observer observer);
    public void delete(Observer observer);
    public void notifyObserver();
}

public interface Observer {
	public void update(String arg);
}
public class PublisherImpl implements Publisher {
	private List<Observer> observers = new ArrayList<>();
    private String arg;
    
    @Override
    public void add(Observer observer) {
    	observers.add(observer);
    }
    
    @Override
    public void delete(Observer observer) {
    	observers.remove(index);
    }
    
    @Override
    public void notifyObserver() {
    	for (Observer Observer : observers) {
        	observer.update(this.arg);
        }
    }
    
    public void setArg(String arg) {
    	this.arg = arg;
        notifyObserver();
    }
}
public ObserverImpl implement Observer {
	private String id;
    private Publisher publisher;
    
    public ObserverImpl(Publisher publisher) {
    	this.publisher = publisher;
        publisher.add(this);
    }
    
    @Override
    public void update(String arg) {
    	System.out.println(id + " <-- " + arg);
    }
}

'디자인 패턴' 카테고리의 다른 글

Iterator Pattern - 행위  (0) 2023.07.19
Proxy Pattern - 구조  (0) 2023.07.19
Strategy Pattern - 행위  (0) 2023.07.19
Factory Pattern - 생성  (0) 2023.07.19
Singleton Pattern - 생성  (0) 2023.07.19