디자인 모델 의 행위 모델 (2) - 명령, 교체 기, 중개자, 관찰자, 템 플 릿 방법
모든 실행 요청 을 봉인 합 니 다.
interface Command {
void execute();
};
class OpenCommand : Command {
void execute() {
// open file
}
}
class CloseCommand : Command {
void execute() {
// close file
}
}
//
class MenuItem {
string m_caption;
Command m_command;
void on_clicked() {
m_command.execute();
}
};
//
class CompositeCommand : Command {
OpenCommand m_openCmd;
CloseCommand m_closeCmd;
void execute() {
m_openCmd.execute();
// write file ...
m_closeCmd.execute();
}
}
2 교체 기 모드
용기 대상 의 각 요 소 를 순서대로 방문 하 는 동시에 용기 의 내부 실현 을 노출 하지 않 습 니 다.
std::list<int> lst;
std::list<int>::iterator iter = lst.begin();
while( iter != lst.end() ) {
printf("%d
", *iter);
++iter;
}
3 중개자 모드 하나의 중개 대상 으로 다른 일련의 대상 의 상호작용 을 밀봉 하여 다른 대상 간 작업 의 결합 의존 을 줄인다.
예시:
1. 버튼 을 누 르 면 텍스트 상자 에 메시지 가 표 시 됩 니 다.
2. 단추 와 텍스트 상자 가 직접 결합 되 지 않 았 습 니 다. 단 추 는 중개 창 을 통 해 메 시 지 를 전달 합 니 다.
//
interface Mediator {
void button_clicked();
}
class Button {
Mediator m_mediator;
// ,
void on_click() {
m_mediator.button_clicked();
}
}
class TextBox {
void setText(string text) { ... }
}
class Window : Mediator {
Button m_button;
TextBox m_textbox;
void init() {
m_button.m_mediator = this;
}
//
void button_clicked() {
m_textbox.setText("button clicked");
}
}
4 관찰자 모드
대상 간 의 한 쌍 의 다 의존 관계, 한 대상 의 상태 가 바 뀌 면 다른 의존 대상 은 즉시 통 지 를 받는다.
구독 - 게시 모드 라 고도 합 니 다.
class Observer {
void update(int state);
}
class Subject {
vector<Observer> m_obsList;
int m_state;
void addObserver(Observer obs) {
m_obsList.add(obs);
}
void changeState(int state) {
m_state = state;
for(i = 0; i < m_obsList.size(); ++i) {
m_obsList[i].update(state);
}
}
}
5 템 플 릿 방법 모드 고정된 알고리즘 이나 실행 과정 골격 을 정의 하고 실행 또는 알고리즘 의 상세 한 과정 은 하위 클래스 에서 이 루어 집 니 다.
class Storage {
public:
// ,
void saveData(char[] data) {
this.open();
this.write(data);
this.close();
}
protected:
//
void open() {}
void write(char[] data) {}
void close() {}
}
//
class FileStorage : Storage {
void open() {
// open file ...
}
void write(char[] data) {
// write data to file
}
void close() {
// close file
}
}
//
class DBStorage : Storage {
void open() {
// open db connection ...
}
void write(char[] data) {
// insert data to db table
}
void close() {
// close db connection
}
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.