Patrones y América del diseño - estructural - el modo de adaptador (XXII)

explicación

Este modelo se utiliza para la adaptación, no se convertirá en la interfaz compatible interfaz compatible que permite la clase original y no a causa de las interfaces incompatibles para trabajar juntos para trabajar juntos

código fuente de la aplicación

"SpringMVC código fuente lectura - un importante flujo de procesamiento de solicitud DispatcherServlet (d)"

Mango es el objeto puede estar presente en cualquiera de una manera diferente de la manipulación de diferentes interfaces de adaptación de la manija por HandleAdapter 

Sobre la base de la herencia

// 类适配器:基于继承
pública  interfaz iTarget {
   void f1 ();
  void f2 ();
  anular fc (); 
} 

Pública  clase adaptée {
   público  vacío fa () { // ...} 
  pública  vacío FB () { // ...} 
  pública  vacío FC () { // ...} 
} 

pública  clase adaptador se extiende adaptée implementos iTarget {
   pública  vacío f1 () {
     súper .fa (); 
  }
  
  pública  vacío F2 () {
     // ... reimplementar F2 () ... 
  } 
  
  // Aquí FC () no tiene por qué ser implementado directamente heredado de adaptée, que es el adaptador de objeto con la mayor diferencia 
}

Basado en una combinación de

// 对象适配器:基于组合
pública  interfaz iTarget {
   void f1 ();
  void f2 ();
  anular fc (); 
} 

Pública  clase adaptée {
   público  vacío fa () { // ...} 
  pública  vacío FB () { // ...} 
  pública  vacío FC () { // ...} 
} 

pública  clase adaptador implementa iTarget {
   privado adaptée adaptée; 
  
  pública adaptador (adaptée adaptée) {
     este .adaptee =Adaptée; 
  } 
  
  pública  vacío F1 () { 
    adaptee.fa (); // confiada a la adaptée 
  } 
  
  pública  vacío F2 () {
     // ... re-aplicar F2 () ... 
  } 
  
  pública  vacío FC () { 
    adaptee.fc (); 
  } 
}

modo de adaptador de escenarios de aplicación

1. La interfaz externa en una interfaz interna compatible con la interfaz interna para que pueda

2. Compensación de defectos de diseño de la interfaz interna. Interfaz abstracta a un adaptador de interfaz más abstracta a través de un adaptador antes de la nueva interfaz

ejemplo

Diseño de Interfaces paquete defectuoso

SDK introduce interfaces externas. Al abstraer un mejor diseño de la interfaz

público  de clase CD { // esta clase desde el SDK exterior, no tenemos el derecho de modificar su código
   // ... 
  pública  estática  vacío staticFunction1 () { // ...} 
  
  pública  vacío uglyNamingFunction2) {( // ...} 

  pública  vacío tooManyParamsFunction3 ( int la PARAMA, int paramB, ...) { // ...} 
  
   pública  vacío lowPerformanceFunction4 () { // ...} 
} 

// adaptador de reconstrucción modo 
público  de clase iTarget {
   nula function1 ();
   vacíofunction2 ();
   nula fucntion3 (ParamsWrapperDefinition paramsWrapper);
   nula FUNCTION4 ();
   // ... 
}
 // NOTA: nombre de la clase adaptador no tiene por qué terminar con adaptador 
pública  clase CDAdaptor la extiende el CD de los implementos iTarget {
   // ... 
  pública  vacío function1 () {
      super .staticFunction1 (); 
  } 
  
  pública  vacío function2 () {
     super .uglyNamingFucntion2 (); 
  } 
  
  pública  vacío FUNCTION3 (ParamsWrapperDefinition paramsWrapper) {
      super.tooManyParamsFunction3 (paramsWrapper.getParamA (), ...); 
  } 
  
  Pública  vacío FUNCTION4 () {
     // ... reimplementar que ... 
  } 
}

Unificar múltiples clases de diseño de la interfaz

Tenemos una tecla de función de filtrado, una pluralidad de sistemas externos dependientes de clase, diferentes clases tiene su propia aplicación, hacemos abstracción a través del adaptador de interfaz interna

público  de clase ASensitiveWordsFilter { // Un sistema de filtración proporciona una palabra sensible interfaz
   // texto el texto original, a continuación, las funciones de salida de texto con palabras sensibles sustitución *** 
  pública Cadena filterSexyWords (cadena de texto) {
     // ... 
  } 
  
  pública filterPoliticalWords de Cuerda (texto String) {
     // ... 
  } 
} 

pública  clase BSensitiveWordsFilter { // B sensibles palabra de sistema de filtrado proporciona una interfaz 
  pública filtro String (cadena de texto) {
     // ... 
  } 
} 

pública  clase CSensitiveWordsFilter { // C palabra sensible sistema de filtración proporciona una interfaz 
  públicaFiltro String (cadena de texto, máscara String) {
     // ... 
  } 
} 

// no utilizada anteriormente patrón de adaptadores de código: código de la capacidad de prueba, la mala escalabilidad 
pública  clase de gestión del riesgo {
   Privado ASensitiveWordsFilter la AFILTER = nueva nueva ASensitiveWordsFilter ();
   privada BSensitiveWordsFilter bfilter = nueva nueva BSensitiveWordsFilter ();
   privada CSensitiveWordsFilter cFilter = nueva nueva CSensitiveWordsFilter (); 
  
  público cadena filterSensitiveWords (cadena de texto) { 
    cadena maskedText = aFilter.filterSexyWords (texto); 
    maskedText =aFilter.filterPoliticalWords (maskedText); 
    maskedText = bFilter.filter (maskedText); 
    maskedText = cFilter.filter (maskedText, "***" );
     retorno maskedText; 
  } 
} 

// transformación modo de adaptador 
pública  interfaz ISensitiveWordsFilter { // unificado interfaz de definición 
  de filtro String (cadena de texto); 
} 

pública  clase ASensitiveWordsFilterAdaptor los implementos ISensitiveWordsFilter {
   privado ASensitiveWordsFilter la AFILTER;
   pública filtro String (cadena de texto) { 
    cadena maskedText =aFilter.filterSexyWords (texto); 
    maskedText = aFilter.filterPoliticalWords (maskedText);
     retorno maskedText; 
  } 
} 
// ... omitido BSensitiveWordsFilterAdaptor, CSensitiveWordsFilterAdaptor ... 

// mejor escalabilidad, más en línea con el principio de apertura y cierre, si se agrega un nuevo sensible sistema de filtrado de palabra,
 // esta clase completamente sin cambio; pero no para la programación basada en la interfaz, el código de una mejor capacidad de prueba. 
público  de clase de gestión del riesgo { 
   Privado List <> Filtros ISensitiveWordsFilter = new new ArrayList <> (); 
 
  pública  vacío addSensitiveWordsFilter (filtro ISensitiveWordsFilter) { 
    filters.add (filtro); 
  } 
  
  públicaCadena filterSensitiveWords (cadena de texto) { 
    Cadena maskedText = texto;
    para (ISensitiveWordsFilter filtro: filtros) { 
      maskedText = filter.filter (maskedText); 
    } 
    Devolver maskedText; 
  } 
}

 

Supongo que te gusta

Origin www.cnblogs.com/LQBlog/p/12572334.html
Recomendado
Clasificación