자바 디자인 모드 의 모니터 모드 인 스 턴 스 상세 설명
모니터 모델 은 세 가지 요소 가 있 는데 그것 이 바로 사건 원,사건 대상,모니터 이다.
이벤트 소스:말 그대로 사건 발생 의 원천,예 를 들 어 클릭 한 버튼 은 감청 대상 에 속 합 니 다.
사건 대상:이것 은 사건 원 과 자주 헷 갈 리 고 사건 원 을 포장 하 는 데 자주 사용 된다.기억 하 세 요.이것 은 사건 이기 때 문 입 니 다.예 를 들 어 사건 원 을 클릭 하면 사건 원 과 자신의 느낌 을 구별 하고 나무 에 밤 이 있 습 니 다.
모니터:이것 은 모니터 모드 의 핵심 입 니 다.이벤트 발생 후의 동작 을 정의 합 니 다.보통 이벤트 대상 은 모니터 에서 정의 하 는 함수 로 참 여 됩 니 다.
다음은 간단 한 밤 을 들 어 보 겠 습 니 다.
이야기 의 배경 은 샤 오 밍 이 위생 을 중시 하지 않 는 아이 라 서 그의 어머니는 그의 건강 을 매우 걱정 하고 식사 전에 손 을 씻 어야 한다 고 규정 하고 있다.
곰 아 이 를 정의 하 다.곰 아 이 는 감청 대상 이 고 사건 의 근원 이 며 모든 사건 이 사건 의 근원 이다.이것 은 쓸데없는 말 인 것 같다.
public class Child {
private String name;
private RemindListener remindListener;
public Child(String name){
this.name = name;
}
public void eat() {
if(null!=remindListener){
remindListener.remind(new RemindWashingHandsEvent(this));
}
System.out.println("Child eat...");
}
public void addListener(RemindListener listener){
remindListener = listener;
}
}
다음은 사건 대상 을 살 펴 보 자.사건 대상 은 위 에서 말 한 것 처럼 사건 원 을 포장 했다.우 리 는 식사 전에 손 씻 는 사건 을 정의 한다.
public class RemindWashingHandsEvent {
private Child child;
public RemindWashingHandsEvent(Child child){
this.child = child;
}
}
이벤트 대상 은 이벤트 의 속성,상 태 를 정의 합 니 다.이 어 사건 발생 을 정의 한 후 감청 기의 동작 으로 손 씻 기 를 알 린 다.
public class RemindListener {
public void remind(RemindWashingHandsEvent remindWashingHandsEvent){
System.out.println("listen to mom, washing hands before eating...");
}
}
주의 하 세 요.모니터 는 주로 동작 을 봉 인 했 습 니 다.그것 뿐 입 니 다.상기 코드 는 모니터 모델 의 원 리 를 설명 하기 위해 서 입 니 다.코드 가 통속 적 이 고 우아 하지 않 습 니 다.
다음은 자바 표준 라 이브 러 리 를 계승 하거나 실현 하 는 김 에 코드 한 쌍 을 썼 습 니 다.밤 이 깊 었 으 니 시간 이 있 으 면 다시 설명 하 겠 습 니 다.
public class Kid{
private String name;
private List<Listener> liteners;
public Kid(String name) {
this.name = name;
this.liteners = Lists.newArrayList();
}
public void eat(){
for(Listener listener:liteners){
if(listener instanceof WashingHandsListener){
WashingHandsListener washingHandsListener = (WashingHandsListener) listener;
washingHandsListener.fireAfterEventInvoked(new WashingHandsEvent(this," "));
}
}
System.out.println(" ...");
}
public void addListener(Listener listener){
liteners.add(listener);
}
}
public class Event extends EventObject {
/**
* Constructs a prototypical Event.
*
* @param source The object on which the Event initially occurred.
* @throws IllegalArgumentException if source is null.
*/
public Event(Object source) {
super(source);
}
}
public class WashingHandsEvent extends Event{
private String eventName;
/**
* Constructs a prototypical Event.
*
* @param source The object on which the Event initially occurred.
* @throws IllegalArgumentException if source is null.
*/
public WashingHandsEvent(Object source,String eventName) {
super(source);
this.eventName = eventName;
}
public String getEventName() {
return eventName;
}
public void setEventName(String eventName) {
this.eventName = eventName;
}
}
public interface Listener extends java.util.EventListener{
public void fireAfterEventInvoked(Event event);
}
public class WashingHandsListener implements Listener{
@Override
public void fireAfterEventInvoked(Event event) {
WashingHandsEvent washingHandsEvent = (WashingHandsEvent) event;
System.out.println(" "+ washingHandsEvent.getEventName());
}
}
public class Test {
public static void main(String[] args) {
Kid xiaoming = new Kid("xiaoming");
xiaoming.addListener(new WashingHandsListener());
xiaoming.eat();
}
}
출력 결과:더 많은 자바 관련 내용 에 관심 이 있 는 독 자 는 본 사이트 의 주 제 를 볼 수 있다.
본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.