2020-03-15
묘사
방문자 모드 실행
기술 블로그:https://blog.csdn.net/qq_40674583
수필.
방문자 모드
참조 블로그:https://www.jianshu.com/p/1f1049d0a0f4
public interface Visitor {
//
void visit(Engineer engineer);
//
void visit(Manager manager);
}
public abstract void accept(Visitor visitor);
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
// , 。
import java.util.LinkedList;
import java.util.List;
public class BusinessReport {
private List mStaffs = new LinkedList<>();
public BusinessReport() {
mStaffs.add(new Manager(" -A"));
mStaffs.add(new Engineer(" -A"));
mStaffs.add(new Engineer(" -B"));
mStaffs.add(new Engineer(" -C"));
mStaffs.add(new Manager(" -B"));
mStaffs.add(new Engineer(" -D"));
}
/**
*
* @param visitor , CEO、CTO
*/
public void showReport(Visitor visitor) {
for (Staff staff : mStaffs) {
staff.accept(visitor);
}
}
}
교체자 모드
참조 블로그:https://www.jianshu.com/p/3dd7b4e73561
교체기 모드 (Iterator) 는 집합 대상의 각종 요소에 순서대로 접근하고, 그 대상의 내부 표시를 노출하지 않는 방법을 제공합니다.
public interface Iterator{
public abstract boolean hasNext();
public abstract Object next();
}
public class BookShelfIterator implements Iterator {
private BookShelf bookShelf;
private int index;
public BookShelfIterator(BookShelf bookShelf) {
this.bookShelf = bookShelf;
this.index = 0;
}
public boolean hasNext() {
if (index < bookShelf.getLength()) {
return true;
} else {
return false;
}
}
public Object next() {
Book book = bookShelf.getBookAt(index);
index++;
return book;
}
}
public interface Aggregate{
public abstract Iterator iterator();
}
public class BookShelf implements Aggregate {
private List books;
public BookShelf() {
this.books = new ArrayList();
}
public Book getBookAt(int index) {
return books.get(index);
}
public void appendBook(Book book) {
books.add(book);
}
public int getLength() {
return books.size();
}
public Iterator iterator() {
return new BookShelfIterator(this);
}
}
관찰자 모드
참조 블로그:https://baijiahao.baidu.com/s?id=1639044219412817957&wfr=spider&for=pc
관찰자 모드(Publish/Subscribe) 모드라고도 불리며 행위형 모드의 일종으로 일대다 의존 관계를 정의하여 여러 관찰자 대상이 특정한 주제 대상을 동시에 감청하도록 한다.이 주제 대상은 상태가 변할 때 모든 관찰자 대상에게 통지하여 그들이 자동으로 자신을 갱신할 수 있도록 한다
위에서 볼 수 있듯이 이 안에는 두 가지 유형(주제와 관찰자)이 모두 네 가지 역할이 포함되어 있다.
(1) Subject: 모든 관찰자 대상을 하나의 집합에 저장하여 임의의 관찰자가 있을 수 있고 추상 주제는 하나의 인터페이스를 제공하여 관찰자 대상을 추가하고 삭제할 수 있다.스타가 모든 팬을 한 계정에 저장해 팬 수를 제한하지 않고 신규 팬을 늘릴 수도 있고 블랙 팬을 끌어올릴 수도 있다는 뜻이다.
(2) ConcreteSubject: 구체적인 주제, 이 역할은 관련 상태를 구체적인 관찰자 대상에 저장하고 구체적인 주제의 내부 상태가 바뀔 때 등록된 모든 관찰자에게 알림을 보낸다.우리 스타들이 움직임이 생기면 팬들에게 소식을 전한다는 뜻이다.
(3) Observer: 추상 관찰자, 관찰자의 추상 클래스로 주제 변경 알림을 받을 때 자신을 업데이트할 업데이트 인터페이스를 정의합니다.이것이 바로 우리 모든 팬들의 추상이다.
(4)ConcrereObserver: 구체적인 관찰자, 추상적인 관찰자 정의의 업데이트 인터페이스를 실현하여 주제 변경 알림을 받을 때 자신의 상태를 업데이트합니다.구체적으로 모든 팬들은
개인적 이해:
관찰자 모델의 주요 장점은 표시층과 데이터 논리층의 분리를 실현할 수 있고 관찰 목표와 관찰자 사이에 추상적인 결합을 구축하여 방송 통신을 지원할 수 있다는 것이다.그 주요 단점은 하나의 관찰 목표 대상에 직접적이고 간접적인 관찰자가 많으면 모든 관찰자를 통지하는 데 많은 시간이 걸리고 관찰자와 관찰 목표 사이에 순환 의존이 있으면 관찰 목표가 그들 사이를 순환 호출하여 시스템 붕괴를 초래할 수 있다는 것이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.