Patrón de diseño compuesto en C++

Requisito previo: patrón de diseño compuesto El patrón
compuesto es uno de los patrones más utilizados en la industria y aborda un problema muy significativo y sutil. Se usa cuando el usuario desea tratar el objeto individual de la misma manera que la colección de esos objetos individuales, por ejemplo, es posible que desee considerar una página de la copia como la copia completa, que es básicamente una colección de páginas o si desea crear una jerarquía de algo en la que desee considerar todo como el objeto. 
Componga objetos en estructuras de árbol para representar jerarquías de parte-todo. Composite permite a los clientes tratar objetos individuales y composiciones de objetos de manera uniforme.
En el caso de Photoshop, donde dibujamos muchos objetos individuales y luego esos objetos componen un objeto único completo y es posible que desee aplicar alguna operación en el objeto completo en lugar de cada uno de los objetos individuales. 
 

Aquí, en este diagrama, como puede ver, tanto el compuesto como la hoja implementan el diagrama de componentes, lo que permite la misma operación en ambos objetos, pero la parte importante es la clase compuesta, que también contiene los objetos componentes, que está simbolizada por el diamante negro que indica la relación de composición entre el compuesto. y clase de componente.
Luego, cómo diseñar nuestras clases para acomodar tales escenarios. Intentaremos entenderlo implementando nuestro ejemplo de copia. Digamos que tiene que crear una página que tenga operaciones como agregar, eliminar, eliminar y también una copia que tendrá las mismas operaciones que las páginas individuales.
Tal situación es la mejor tratada con el patrón compuesto. 
 

CPP

// CPP program to illustrate
// Composite design pattern
#include <iostream>
#include <vector>
using namespace std;
 
class PageObject {
public:
    virtual void Add(PageObject a)
    {
    }
    virtual void Remove()
    {
    }
    virtual void Delete(PageObject a)
    {
    }
};
 
class Page : public PageObject {
public:
    void Add(PageObject a)
    {
        cout << "something is added to the page" << endl;
    }
    void Remove()
    {
        cout << "something is removed from the page" << endl;
    }
    void Delete(PageObject a)
    {
        cout << "something is deleted from page " << endl;
    }
};
 
class Copy : public PageObject {
    vector<PageObject> copyPages;
 
public:
    void AddElement(PageObject a)
    {
        copyPages.push_back(a);
    }
 
    void Add(PageObject a)
    {
        cout << "something is added to the copy" << endl;
    }
    void Remove()
    {
        cout << "something is removed from the copy" << endl;
    }
    void Delete(PageObject a)
    {
        cout << "something is deleted from the copy";
    }
};
 
int main()
{
    Page a;
    Page b;
    Copy allcopy;
    allcopy.AddElement(a);
    allcopy.AddElement(b);
 
    allcopy.Add(a);
    a.Add(b);
 
    allcopy.Remove();
    b.Remove();
 
    return 0;
}
something is added to the copy
something is added to the page
something is removed from the copy
something is removed from the page

Complejidad temporal : O(1) 
Espacio auxiliar : O(1)

Ahora, la misma operación que se puede aplicar a un objeto individual y también se puede aplicar a la colección de esos objetos individuales hace que sea muy fácil trabajar con un objeto más grande que está hecho de objetos independientes más pequeños. 
El ejemplo más notable del patrón compuesto se encuentra en cualquier kit de herramientas de interfaz de usuario. Considere el caso de los elementos de la interfaz de usuario en los que cada elemento de la interfaz de usuario de nivel superior de la interfaz de usuario se compone de muchos elementos de la interfaz de usuario de nivel inferior independientes más pequeños y el elemento de la interfaz de usuario de nivel superior e inferior responde a los mismos eventos y acciones.
Referencias: 
1. Patrón compuesto c# 
2. Patrón compuesto
Este artículo es una contribución de Ankit Singh . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usandowrite.geeksforgeeks.org o envíe su artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *