java 디자인 모드의 관찰자 모드 (Observer)

2698 단어 java 디자인 모드
1. 장면 사용:
1. 관찰자: 한 대상의 상태를 업데이트하려면 다른 대상의 동기화 업데이트가 필요하고 다른 대상의 수량은 동적으로 가변을 추가할 수 있다.
2. 대상은 자신의 업데이트를 다른 대상에게 통지해야 하며 다른 대상의 구체적인 행위를 알 필요가 없다.
2. 관찰자 모델의 장점:
1. Subject와 Observer는 각각 독립적으로 변경할 수 있는 전송 결합입니다.
2. Subject가 방송 알림을 보낼 때 구체적인 Observer를 지정할 필요가 없다. Observer는 자체로subject에 가입할지 여부를 결정할 수 있다.
3. 디자인 방법: 세 개의 인터페이스, 한 피관찰자 실현류, 여러 관찰자 실현류, 한 장면류
1. 커넥터 3개
관찰자 인터페이스:Observer.java
관찰자 인터페이스:Observerable.java
피관찰자 업무 인터페이스(피관찰자의 행위): 예(IHanFeiZi.java)
2. 피관찰자 실현류(피관찰자 인터페이스와 피관찰자 업무 인터페이스 실현)
3. 관찰자(관찰자 인터페이스 실현)
관찰자와 피관찰자 인터페이스javajdk가 제공됨:
피관찰자 업무 인터페이스 (IHanFeiZi.java)
public interface IHanFeiZi {         
    public void haveBreakfast();  
    public void haveFun();  
}  

관찰자 구현 클래스: (HanFeiZi.java)
public class HanFeiZi implements IHanFeiZi, Observerable{  

   private ArrayList<Observer> observerList = new ArrayList<Observer>();  
    
   @Override  
    public void haveBreakfast() {  
       System.out.println("   :    ");  
        notifyObservers("       ");  
   }  
  
    @Override  
   public void haveFun() {  
        System.out.println("   :    ");  
        notifyObservers("       ");  
    }  
  
    @Override  
    public void addObserver(Observer observer) {  
       observerList.add(observer);  
    }  
  
    @Override  
    public void deleteObserver(Observer observer) {  
        observerList.remove(observer);  
    }  
 
    @Override  
   public void notifyObservers(String context) {  
        for(Observer observer : observerList){  
          //         
         observer.update(context);  
        }  
    }  
}  

관찰자 실현류:한페이즈위프.java
public class HanFeiZiWife implements Observer{  
 
   @Override  
  public void update(String context) {  
       System.out.println("     :          ");  
    }  
}  

 
장면 클래스 코드:
client.java
public class Client {  
     
    public static void main(String[] args) {  
       HanFeiZi hanFeiZi = new HanFeiZi();         
        HanFeiZiWife hanFeiZiWife = new HanFeiZiWife();         
        hanFeiZi.addObserver(hanFeiZiWife);  
       hanFeiZi.haveBreakfast();  
       hanFeiZi.haveFun();  
   }  
}  

 
 
 
 
 

좋은 웹페이지 즐겨찾기