Usted menciona tanto los patrones de diseño como el acoplamiento. Estos son conceptos separados, así que los trataré por separado. La única conexión real es que los patrones de diseño tienden a promover un acoplamiento flojo (ya que es un aspecto importante del buen diseño).
Patrones de diseño
El concepto de Patrones de diseño es en realidad bastante simple: son solo un conjunto de plantillas sobre cómo tratar varios problemas comunes. Hay 2 razones principales por las que son populares:
- Están 'probados': se han usado antes muchas veces y los beneficios / inconvenientes de cada uno son generalmente conocidos, en particular, cualquier problema sutil que pueda causar grandes problemas.
- Proporcionan un conjunto común de terminología y permiten una comunicación más fácil. Si alguien dice que "la clase X desempeña el papel de observador en el patrón de observador", entonces los desarrolladores que estén familiarizados con el patrón pueden comprender de inmediato lo que está sucediendo.
¿Cómo sabes que lo has implementado correctamente? Eso es complicado. Para la mayoría de los patrones es simple: lo has asimilado o no lo has hecho. Algunos patrones están menos claramente definidos que otros, por ejemplo, model-view-controller . Patrones como ese se usan mejor como pautas generales. Los detalles de cómo implementarlo son menos importantes que comprender las razones por las que existe el patrón y lo que se pretende lograr.
Los patrones de diseño no son 'la única forma verdadera'. A menudo necesitará adaptarlos para sus propósitos específicos, o algunas veces simplemente no habrá patrones que se ajusten a los requisitos. Forzar un patrón de diseño donde no encaja es una mala idea; es como usar un martillo realmente bueno cuando lo que realmente quieres es un destornillador.
Acoplamiento
Esta es una idea realmente importante en informática. Dado que los requisitos para la mayoría de los proyectos de software cambian con el tiempo (a veces significativamente), la capacidad de un diseño para hacer frente a los cambios es importante. El acoplamiento es básicamente la medida de "¿qué tan difícil sería cambiar este componente por otro?" El 'componente' podría ser un método, clase, paquete, biblioteca, etc.
Hay varios tipos de acoplamiento enumerados en este artículo de Wikipedia .