Gracias a todos......
Cita:
Iniciado por hhs El detalle con esto es que en algún momento el objeto que va a usar tu clase estática tiene que decidir que método ocupar para su búsqueda y eso se traduce en una serie de if o en el uso de un switch, si usas el patrón puedes quitar la ronda de condiciones y simplificar el uso de tus algoritmos. te recomiendo la siguiente lectura:
http://www.informit.com/articles/art...98607&seqNum=2 El "Contexto" no es simple sino formado por estados de varias variables ........creeria o hay en algun lado una serie de IFs / SWITCH-CASEs o bien accedo a un arreglo multi-dimesional que guarda el nombre del metodo o clase de busqueda.......... Si estoy equivocado dame un ejemplo de implementacion pero es por el caso particular de un contexto complejo que no veo el patron por si mismo resuelva el asunto. Distinto seria se pudiera hablar de un contexto por ejemplo de suma / resta / division / multiplicacion / etc......
Sobre lo que dices tu @Dashboard...... tengo implementada
IComparable como en C#, no puedo hacer dibujitos UML pero dejo las interfaces por si ven algo mal......
Código PHP:
Ver original/**
* Interfaces
*
* @package FastDev\Sequences
* @author Pablo Bozzolo (2013)
*
*/
/**
* IComparable: interfaz homologa a C#
*/
Interface IComparable
{
/**
* @param <type> algo comparar
* @return int {-1,0,1}
*/
public function compareTo($other);
}
Interface IElement extends IComparable { }
Interface ISequenceable extends IComparable, \Iterator, \Serializable
{
public function length();
public function addElem (IElement $tag);
public function findElem (IElement $search, $continue=true);
public function findSub(ISequenceable $sub);
}
Interface IGap extends ISequenceable { }
/**
* Secuencias que pueden contener Gaps
*/
Interface IGapSequenceable extends ISequenceable
{
public function length($include_gap_length=false);
public function compareTo ($sec, $gaps=null);
public function haveGaps();
public function addGap (IGap $gap);
public function addElem (IElement $tag);
public function findElem (IElement $search, $continue=true);
public function findSub(ISequenceable $sub, $gaps=null);
}
/**
* Chequeos de concistencia
*/
Interface IChecking
{
public function getMinLen();
public function getMaxLen();
public function getMustContain();
public function getMustNotContain();
public function getCanContain();
public function countMustContain();
public function countMustNotContain();
public function countCanContain();
public function setMinLen(int $len);
public function setMaxLen(int $len);
public function addCanContain(IElement $e);
public function addMustContain(IElement $e);
public function addMustNotContain(IElement $e);
// y chequeo con:
public function check();
}
/**
* Secuencias que pueden contener Gaps pero ademas profundidad (listas de nodos)
*/
Interface ITagSequenceable extends IGapSequenceable
{
public function getDeep($pos=null);
public function compareTo ($sec, $gaps=null, $deep=null);
public function addGap (IGap $gap, $deep=null);
public function addElem (IElement $tag , $deep=null);
public function findElem (IElement $search, $continue=true);
public function findSub (ISequenceable $sub, $deep=null, $gaps=null);
}
Interface ISequenceAligneable
{
public static function add (ISequenceable $sec);
public static function align();
}
Voy a usar la libreria para hacer comparaciones, busquedas y alineamientos de secucuencias de HTML / XML, ADN, ARN y proteinas.......
Es muy facil buscar una secuencia dentro de otra, aun si la secuencia es un arbol DOM exportado como DomNodeList