디자인 모델 의 행위 모델 (2) - 명령, 교체 기, 중개자, 관찰자, 템 플 릿 방법

1 명령 모드
    모든 실행 요청 을 봉인 합 니 다.
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
        }
    };

좋은 웹페이지 즐겨찾기