Notas sobre el principio de apertura y cierre de patrones de diseño de C++

Tabla de contenido

1. ¿Qué es el principio abierto-cerrado?

2. Por qué hay un principio abierto y cerrado

3. Y cómo usar el principio de apertura y cierre.


1. ¿Qué es el principio abierto-cerrado?

Definición: una entidad de software, como clases, módulos y funciones, debe estar abierta para la extensión y cerrada para la modificación.

Para decirlo sin rodeos, cuando un producto está listo, si se agregan nuevas funciones, debemos tratar de expandir en lugar de modificar las funciones o estructuras ya diseñadas, como las computadoras portátiles, el fabricante produce una computadora portátil, si queremos usar para el mouse, solo necesitamos usar la interfaz que nos proporciona el fabricante para conectarnos al usb que compramos o fabricamos.

2. Por qué hay un principio abierto y cerrado

El cliente solicitó diseñar un requisito de interfaz de inicio de sesión

loginFrom es la interfaz de inicio de sesión
y Cirlebutton es un botón circular en la interfaz
, así que lo diseñé rápidamente, así que envié la clase diseñada al líder del equipo del proyecto.
El líder del equipo me miró durante dos minutos y apretó los puños. Hazlo, y volver a llamar por fin.
No sé si no he aprendido patrones de diseño, así que
el siguiente es el código que escribí.

class Cirlebutton {
public:
    void dispaly() {
        ......
    }
};
class loginFrom {
    Cirlebutton btA;
public:
    void displays() {
        ........
    }
};

Se puede ver que aunque he cumplido con los requisitos básicos, si los requisitos cambian y quiero cambiar un nuevo botón cuadrado, ¿tengo que cambiar mecánicamente el Cirlebutton en loginfrom a RectangeButton?
¿Tengo que volver a cambiarlo cada vez que cambia el botón, por lo que la escalabilidad del programa es extremadamente pobre y también es muy hostil para otras personas
? cuidadosamente Code, y luego el arrogante líder del equipo parecía feliz.

class AbstractButton {
public:
    virtual    void displays() {

      .........
    };
};
class Cirlebutton : public AbstractButton {
public:
    void displays() {
    ............
    }
};
class loginFrom {
    AbstractButton* btA;
public:
    void setbt(AbstractButton* btAa) {
        this->btA = btAa;
    };
    void displays() {
        this->btA->displays();
    }

};

Entonces, ¿cuál es el misterio de esta compra de proxy?
Puede ver que este código agrega una clase principal abstracta AbstractButton como interfaz, y
la subclase Cirlebutton implementa AbstractButton. Al mismo tiempo, reescribe el método de visualización
y agrega una nueva palabra clave virtual a la clase padre para modificar el método de abstracción de visualización.

3. Y cómo usar el principio de apertura y cierre.

En Java, podemos definir la programación orientada a la interfaz. Solo necesitamos el método de implementación
, pero no existe tal palabra clave en C ++. C ++ puede implementar interfaces definiendo funciones virtuales o funciones virtuales puras a través de la palabra clave virtual, y luego las subclases heredan esta interfaz Clasifique y defina la función de la función virtual,
de modo que cada vez que cambiemos los requisitos comerciales, solo necesitamos definir un nuevo botón para heredar.

Supongo que te gusta

Origin blog.csdn.net/m0_59054762/article/details/130460752
Recomendado
Clasificación