2010-04-23 8 views
7

Estoy aprendiendo STL y patrones de diseño. quería saber ¿hay algún documento o enlace que explica cómo se implementan los patrones de diseño en AWL lo hice el google pero no es capaz de obtener datos muchopatrones de diseño utilizados en STL (biblioteca de plantillas estándar)

+3

El STL es una programación genérica no orientada a objetos. Necesitas retapear – KitsuneYMG

+1

@kts: los patrones de diseño no son exclusivos del diseño orientado a objetos. –

+0

¿Ves alguna implementación de STL? El código fuente puede responder muchas preguntas. – Ross

Respuesta

12

Espero que signifique, "qué patrones de diseño se pueden identificar en el STL".

La pila STL es un adaptador de contenedor. Un adaptador es un patrón de diseño. El iterador es también un patrón de diseño. Los objetos de la función STL están relacionados con el patrón de comando.

Patrones:

  1. adaptador (adaptadores de contenedores)
    • pila
    • colas
    • colas de prioridad
  2. Iterator
  3. adaptador + Comando (adaptadores de función)
  4. Iterator + Adaptador (adaptadores iterador)
    • iteradores inversa
    • iteradores de inserción
    • iteradores de transmisión en
  5. Método Plantilla (algoritmos STL utilizando funciones especificadas por el usuario)
  6. qué patrón creacional ? (Asignadores)

La forma en que se implementan estos patrones es muy diferente de la forma en que se implementan en un diseño orientado a objetos. Josuttis escribió "el concepto de STL contradice la idea original de programación orientada a objetos". Esto es lo que está causando la confusión en torno a su pregunta.

+0

¿Tiene un ejemplo para un adaptador de iterador en el STL? – Frank

+0

@dehmann: los agregué. Siéntase libre de editar mi respuesta. –

+1

5. Método de la plantilla (algoritmos STL utilizando funciones especificadas por el usuario) –

1

Creo que su problema es que los patrones de diseño no se implementadas en STL. Se pueden implementar en C++ y usar contenedores y algoritmos de STL, pero AWL y patrones de diseño no están relacionados de ninguna otra manera.

Mi consejo sería aprender acerca de STL leyendo algo como Nicolai Josuttis' excellent book The C++ Standard Library: A Tutorial and Reference o STL Tutorial and Reference Guide. Esto ayudará a aprender lo que STL puede hacer por usted. Luego profundice en la implementación de patrones de diseño en C++ utilizando su conocimiento sobre el STL.

+1

STL y Patrones de diseño definitivamente están relacionados. Ambos son sobre abstracciones. –

+0

Iterators es un patrón de diseño. Definitivamente implementado en el STL. –

+0

@MartinYork - A pesar del nombre, no estoy de acuerdo con que la implementación de iteradores en STL sea una implementación del patrón de diseño del iterador más de lo que lo son los punteros. El patrón del iterador canónico incluye un método para determinar si el cruce ya no producirá elementos sin preguntar a la colección subyacente. –

1

STL hace un uso extenso de plantillas. GoF llama a este tipos parametrizados. Las plantillas son útiles para personalizar una solución de patrón de diseño o para encontrar una solución nueva e intuitiva. (Para obtener más información, consulte la sección "Herencia versus tipos parametrizados" en "Design Patterns: Elements of Reusable Object-Oriented Software"). La ventaja de familiarizarse con STL (y boost) es que son una buena fuente para aprender sobre plantillas (y metaprogramación) en C++, que a su vez pueden utilizarse para diseñar mejores diseños.

0

De C++ 11, tenemos threes tipo de smart pointer, es decir, shared_ptr, unique_ptr y weak_ptr, el patrón detrás de ellos es: Modelo Proxy.