Siguiendo con la recopilación de codekatas sobre patrones del diseño software llegamos al patrón Composite. Este patrón es una forma de reutilizar código fuente, haciendo objetos que sean compuestos de otros, como su nombre indica.
Estos conceptos se pueden usar por ejemplo en las ventas que pueden ser combinaciones de varias ventas, en figuras geométricas compuestas, en aplicación de reglas de precios, productos simples o compuestos, etc.. Por ejemplo, aplicando descuentos, puede ser que tengamos descuentos simples y descuentos que puedan ser la acumulación de otros varios. Un producto puede ser simple, o puede ser un pack de una combinación de otros productos. Una figura puede ser simple, o puede ser una combinación de varias figuras simples. Y así suma y sigue según el escenario en curso..
Cómo se traduce el patrón Composite en códigos fuentes PHP
La idea es la misma sea el lenguaje de programación que sea. Pero se traduce en algo como lo siguiente:
Por ejemplo, una interfaz que simplemente define que tenemos un contrato de uso que nos obliga a implementar la función printFeatures(). Y dos clases Something y SomethingComposed que implementan la interfaz.
Al grano, es más fácil verlo en el fuente..
<?php
interface ISomething
{
public function printFeatures();
}
<?php
class Something implements ISomething
{
public function printFeatures()
{
echo 'Here we print the features '.PHP_EOL;
}
}
<?php
class SomethingComposed implements ISomething
{
private $somethings = [];
public function addSomething(Something $something)
{
$this->somethings[] = $something;
}
public function printFeatures()
{
foreach ($this->somethings as $something) {
$something->printFeatures();
}
}
}
El objeto SomethingComposed aplica el patrón Composite.