más

 

En primer lugar, los cambios localizados - el objetivo es reducir el número de personas directamente afectadas por el cambio de un módulo;

1, se espera que los cambios esperados (cambios esperados):

Asegúrese PuedeVotar () devuelve el método verdadero o falso, y se puede escribir una prueba para validar este método lanza IllegalArgumentException.

Copiar el código
Estudiante public class { 
 
  PuedeVotar pública booleano (int edad) { 
      si (i <= 0) throw new IllegalArgumentException ( "La edad debería ser + ve"); 
      Si es falso (i <18) de retorno; 
      o regrese verdadera; 
  } 
}
Copiar el código

biblioteca de clases de guayaba proporciona una herramienta para una inspección categoría de parámetros clase --Preconditions, este método puede ser más capaz de comprobar tales parámetros, pero en este ejemplo, es posible comprobar la

 

2, el mantenimiento de la coherencia semántica (coherencia semántica):

3, el módulo de generalización (generalizar el módulo):

4, se limita a seleccionar los parámetros (límite posibles opciones):

 

En segundo lugar, para evitar una reacción en cadena - el objetivo es limitar la modificación localizada de módulo, con el fin de evitar el cambio a un módulo de afectar indirectamente a otros módulos;

 

Trate de mantener las interfaces existentes, tales como el nombre o la clase del mismo, para tratar de cambiar el módulo a un mínimo. tiempo de enlace en tiempo de mi sistema no se ha reflejado.

Mantener la consistencia semántica es asegurar que el módulo puede trabajar en conjunto entre las diferentes responsabilidades, no confíe demasiado en otros módulos.

1, ocultación de la información (información Ocultar):

2, para mantener la interfaz existente (Mantener interfaces existentes):

3, el límite de trayecto de comunicación (Restringir rutas de comunicación):

4, usando el árbitro (Utilice un intermediario):

 Demeter usando una reacción en cadena puede ser efectivamente impedido:

Ejemplos:

En la película estadounidense "The Godfather" con el fin de deshacerse del padrino si el oponente va a hacer las manos? Por supuesto que no, padrino se encargará de sus hombres se ocupan. Padrino de tan alta posición que le dirigirá a programar tareas con el asesino? Por lo general no es así, que hablará con los hombres de confianza de la descripción, y luego ejecutado por sus hombres van.

Como resultado de ello, observamos, echar un vistazo a tres funciones comunes, matado persona, asesino asesino, CoreMember confidente, de la siguiente manera:

Copiar el código
/ ** 
 * alguien 
 * @author ljtyzhr 
 * 
 * / 
public class la Persona { 
    String nombre pública; 
} 
 
/ ** 
 * killer 
 * @author ljtyzhr 
 * 
 * / 
public class Killer { 
     public void la matanza (la otra persona) { 
         el System.out. println (someone.name + "murió"); 
     } 
} 
 
/ ** 
 * personal de base en torno padrino 
 * 
 * @author ljtyzhr 
 * 
 * / 
public class {CoreMember 
    Killer Killer privada; 
}
Copiar el código

De hecho, el personal básico a tratar directamente con el asesino, padrino sólo se ocupan de confianza, por lo que la relación debe ser de la siguiente manera:

 

Copiar el código
/ ** 
 * personal de base en torno padrino 
 * 
 * @author ljtyzhr 
 * 
 * / 
CoreMember public class { 
    Privado Killer Killer; 
    public void la matanza (la persona a alguien) { 
              killer.kill (alguien); 
    } 
}
Copiar el código

Mi padre tiene una referencia al personal clave, de la siguiente manera:

Copiar el código
/ ** 
 *教父
 * @author ljtyzhr 
 * 
 * / 
public class {DiosPadre 
     coremember CoreMember; 
     
     pública matanza vacío (alguien persona) { 
           asesino asesino asesino = new (); 
           killer.kill (alguien); 
     } 
}
Copiar el código

 Lograr módulo de aislamiento, de manera que la independencia entre los módulos

 

 

 

En tercer lugar, el tiempo de unión finales - el objetivo es controlar el tiempo de implementación y permite a los no desarrolladores para modificar.

1, el registro de tiempo de ejecución (registro de tiempo de ejecución):

2, el archivo de configuración (archivos de configuración):

3, el polimorfismo (polimorfismo):

4, reemplazar el componente (reemplazo de componentes):

5, cumplir con el acuerdo (adherencia a los protocolos definidos) se han definido:

 

Después de un retraso de 0,5 segundos para enviar una petición a la red, el primer pensamiento del manipulador, los resultados de tal error ocurre, la solución es simple, es llamar Looper.prepare () en el hilo, y luego llamar Looper.loop () sobre ella

Copiar el código
private void sendMessageToClient (StringBuilder última s) { 
        nueva rosca (nueva Ejecutable () { 
            @Override 
            public void run () { 
                try { 
                    Thread.sleep (500); 
                } catch (InterruptedException e) { 
                    e.printStackTrace (); 
                } 
                sendToClient. sendDataToClient (s), clientSocketAddress; //网络请求必须在子线程
            } 
        .}) start (); 

    }
Copiar el código

Supongo que te gusta

Origin www.cnblogs.com/zjm15511858030/p/12464865.html
Recomendado
Clasificación