C ++ patrones de diseño - Observador patrón de observador

La motivación (motivación)

  • En el proceso de construcción de software, es necesario establecer un "dependencias" Aviso para ciertos objetos - un objeto (objeto de destino) cambia de estado, todos los objetos dependientes (objetos observador) serán notificados. Si por ejemplo una dependencia demasiado de cerca, el software no será así para resistir el cambio.
  • Utilizando la tecnología orientada a objetos, esta dependencia puede debilitarse, y forman una dependencia estable. Habilitación de arquitectura de software de acoplamiento flexible.

Definición de esquemas

Un tipo de inter-definición del objeto dependencias muchos relación (variación) , de modo que cuando un objeto (el sujeto) cambia de estado, todo depende de que se notifica y actualizan automáticamente. - "Design Patterns" GoF

Estructura (estructura)

 

 

comida para llevar

  • , El patrón Observador orientado a objetos Resumen de modo que puede cambiar el objetivo y de forma independiente del observador, de modo que las dependencias entre los dos para lograr débilmente acoplados.
  • Cuando el objetivo envía una notificación sin especificar el espectador, notificación (información de notificación puede continuar como parámetros) se propagan automáticamente.
  • El espectador decidir si para suscribirse a notificaciones, el público no sabía nada.
  • marco de interfaz de usuario observador modelo se basa en el caso de los patrones de diseño muy comunes, sino que también es una parte importante del patrón MVC.

 La barra de progreso debajo de la consola de Windows Linux son diferentes

clase FileSplitter 
{ 
    Cadena m_filePath;
     int m_fileNumber; 
    ProgressBar * m_progressBar; // 's papel: Controles aviso específico
     // reemplazan mecanismo de notificación abstracto. Transición completado concreto a lo abstracto 
    / * 
    depende de los detalles de implementación, en contra de los principios de diseño principales de inversión depende, módulo de la capa no debe depender de los módulos de bajo nivel, ambos deben depender de lo abstracto 
    a la figura tira en una interfaz gráfica de usuario, si el control del programa programa de Taiwan, indica que la parrilla de programación por un punto negro? 
    * / 

Público : 
    FileSplitter ( const  Cadena y rutaArchivo, int númeroarchivo, ProgressBar * progressBar): 
        m_filePath (rutaArchivo), 
        m_fileNumber (númeroarchivo), 
        m_progressBar (progressBar) { 

    } 
    vacío de Split () {

        @ 1 archivo grande leer 

        // 2. Los lotes pequeños escribir en el archivo 
        de ( int I = 0 ; I <m_fileNumber; I ++ ) {
             // ... 
            un flotador progressValue = m_fileNumber; 
            progressValue = (I + . 1 ) / progressValue; 
            m_progressBar -> el setValue (progressValue); // actualizar la barra de progreso 
        } 

    } 
}; 

clase del MainForm: pública Form1 
{ 
    el cuadro de texto * txtFilePath; 
    el cuadro de texto * txtFileNumber;
    ProgressBar* barra de progreso; // 进度条

pública :
     void Button1_Click () { 

        string rutaArchivo = txtFilePath-> getText ();
        int número = atoi (txtFileNumber-> getText () c_str ().); 
        Divisor FileSplitter (filePath, número, progressBar); 
        splitter.split (); 
    } 
};

 

Supongo que te gusta

Origin www.cnblogs.com/wkfvawl/p/12486243.html
Recomendado
Clasificación