Java 학습노트-관찰자 모드

4494 단어 Java 학습
관찰자 모드(Observer)는 여러 관찰자 대상이 하나의 주제 대상을 동시에 감청하도록 일대다 의존 관계를 정의한다.이 주제의 대상이 상태가 변할 때 모든 관찰자 대상에게 통지하여 자신을 자동으로 업데이트할 수 있도록 한다.
예를 들어 한 단추에 여러 개의 감청기가 있으면 단추를 눌렀을 때 여러 관찰자가 알림을 받고 해당하는 조작을 한다.
관찰자는 네 부분으로 구성된다.
4
  • 추상적인 주제 역할: 모든 관찰자 대상의 인용을 하나의 집합에 저장하고 모든 추상적인 주제 역할은 임의의 수량의 관찰자를 가질 수 있다.추상적인 주제는 관찰자 역할을 추가하고 삭제할 수 있는 인터페이스를 제공합니다.일반적으로 하나의 추상적인 유형이나 인터페이스로 이루어진다

  • 4
  • 추상적인 관찰자 역할: 모든 구체적인 관찰자에게 인터페이스를 정의하고 주제의 알림을 받을 때 자신을 업데이트한다

  • 4
  • 구체적인 주제 역할: 구체적인 주제 내부 상태가 바뀔 때 등록된 모든 관찰자에게 통지한다.구체적인 주제 역할은 보통 하위 클래스로 이루어진다

  • 4
  • 구체적인 관찰자 역할: 이 역할은 추상적인 관찰자 역할이 요구하는 업데이트 인터페이스를 실현하여 자체의 상태와 주제의 상태를 조화롭게 한다.필요하면 구체적인 관찰자 역할은 구체적인 주제 역할을 가리키는 인용을 저장할 수 있다.보통 하위 클래스로 이루어집니다

  •  
    관찰자 모델의 간단한 실현은 다음과 같다.
    추상 주제 역할:
    public interface Watched
    
    {
    
        public void addWatcher(Watcher watcher);//  
    
        public void removeWatcher(Watcher watcher);// 
    
        public void notifyWatchers(String str);// 
    
    }

    추상 관찰자 역할:
    public interface Watcher
    
    {
    
        public void update(String str);
    
    }

    특정 주제 역할:
    public class ConcreteWatched implements Watched
    
    {
    
        private List<Watcher> list = new ArrayList<Watcher>();
    
        
    
        @Override
    
        public void addWatcher(Watcher watcher)
    
        {
    
            list.add(watcher);
    
        }
    
        
    
        @Override
    
        public void removeWatcher(Watcher watcher)
    
        {
    
            list.remove(watcher);
    
        }
    
        
    
        @Override
    
        public void notifyWatchers(String str)
    
        {
    
            for(Watcher watcher : list)
    
            {
    
                watcher.update(str);
    
            }
    
        }
    
    }

    관찰자 역할:
    public class ConcreteWatcher implements Watcher
    
    {
    
        @Override
    
        public void update(String str)
    
        {
    
            System.out.println(str);
    
        }
    
    }

    테스트 클래스:
    public class ObserverTest
    
    {
    
        public static void main(String[] args)
    
        {
    
            Watched girl = new ConcreteWatched();
    
            
    
            Watcher w1 = new ConcreteWatcher();
    
            Watcher w2 = new ConcreteWatcher();
    
            Watcher w3 = new ConcreteWatcher();
    
            
    
            girl.addWatcher(w1);
    
            girl.addWatcher(w2);
    
            girl.addWatcher(w3);
    
    
    
            girl.notifyWatchers("I'm happy");
    
        }
    
    }

    좋은 웹페이지 즐겨찾기