La belleza de los patrones de diseño de aprendizaje - los patrones de diseño - el Builder (X en adelante)

demanda

Tenemos que definir un fondo de recursos ResourcePoolConfig clase de configuración. Esto es un fondo de recursos, sólo tiene que entenderse como el grupo de subprocesos, la agrupación de conexiones, la agrupación de objetos y así sucesivamente. En esta configuración fondo de recursos de clase, hay varios miembros de las variables, lo que es los elementos configurables. Ahora, se escribe código para conseguir esta clase ResourcePoolConfig.

 

 

 Implementación de una

realización

público  de clase ResourcePoolConfig {
   privada  estática  última  int DEFAULT_MAX_TOTAL = 8 ;
  privado  estática  final de  int DEFAULT_MAX_IDLE = 8 ;
  privado  estática  final de  int DEFAULT_MIN_IDLE = 0 ; 

  privada String nombre;
  privada  int maxTotal = DEFAULT_MAX_TOTAL;
  privada  int maxIdle = DEFAULT_MAX_IDLE;
  privada  int minidle = DEFAULT_MIN_IDLE; 

  públicoResourcePoolConfig (nombre de cadena, entero maxTotal, Entero maxIdle, Entero minidle) {
     si (StringUtils.isBlank (nombre)) {
       lanzar  nuevos IllegalArgumentException ( "nombre no debe estar vacío." ); 
    } 
    Esta .name = nombre; 

    si (! maxTotal = nula ) {
       si (maxTotal <= 0 ) {
         lanzar  nuevos IllegalArgumentException ( "maxTotal debe ser positivo." ); 
      } 
      Esta .maxTotal = maxTotal; 
    } 

    Si (maxIdle! = Nula ) {
       si (maxIdle <0) {
         Lanzar  nuevos IllegalArgumentException ( "maxIdle no debe ser negativo." ); 
      } 
      Esta .maxIdle = maxIdle; 
    } 

    Si (! Minidle = nula ) {
       si (minidle <0 ) {
         lanzar  nuevos IllegalArgumentException ( "minidle no debe ser negativo." ); 
      } 
      Esta .minIdle = minidle; 
    } 
  } 
  // ...省略captador方法... 
}

uso

// demasiados parámetros, dando como resultado parámetros de legibilidad pobres pueden pasar error 
ResourcePoolConfig config = nuevo nuevo ResourcePoolConfig ( "DBConnectionPool", 16, nula , 8,. nula , en false , true , 10, 20 es decir, en false , true );

Implementación de los dos

realización

público  de clase ResourcePoolConfig {
   privada  estática  última  int DEFAULT_MAX_TOTAL = 8 ;
  privado  estática  final de  int DEFAULT_MAX_IDLE = 8 ;
  privado  estática  final de  int DEFAULT_MIN_IDLE = 0 ; 

  privada String nombre;
  privada  int maxTotal = DEFAULT_MAX_TOTAL;
  privada  int maxIdle = DEFAULT_MAX_IDLE;
  privada  int minidle = DEFAULT_MIN_IDLE; 
  
  pública ResourcePoolConfig (String nombre) {
     si(StringUtils.isBlank (nombre)) {
       lanzar  nuevos IllegalArgumentException ( "nombre no debe estar vacío." ); 
    } 
    Esta .name = nombre; 
  } 

  Pública  vacío setMaxTotal ( int maxTotal) {
     si (maxTotal <= 0 ) {
       lanzar  nuevos IllegalArgumentException ( "maxTotal debe ser positivo." ); 
    } 
    Esta .maxTotal = maxTotal; 
  } 

  Pública  vacío setMaxIdle ( int maxIdle) {
     si (maxIdle <0 ) {
       lanzar  nuevosIllegalArgumentException ( "maxIdle no debe ser negativo." ); 
    } 
    Esta .maxIdle = maxIdle; 
  } 

  Pública  vacío setMinIdle ( int minidle) {
     si (minidle <0 ) {
       lanzar  nuevos IllegalArgumentException ( "minidle no debe ser negativo." ); 
    } 
    Esta .minIdle = minidle; 
  } 
  // ...省略captador方法... 
}

uso

// ResourcePoolConfig使用举例 
ResourcePoolConfig config = nuevo ResourcePoolConfig ( "dbconnectionpool" ); 
config.setMaxTotal ( 16 ); 
config.setMaxIdle ( 8);

defecto

1. El nombre no puede estar vacío cuando se utilice únicamente la verificación

Hay ciertas limitaciones o entre los elementos de configuración, tales como, a menos de o igual a maxIdle y minidle; 2. dependencias dicha configuración, si el usuario establece maxTotal, maxIdle, minidle uno, se debe establecer explícitamente los otros dos maxTotal. Si seguimos utilizando la práctica actual diseño, que estas dependencias entre los elementos de configuración o de la lógica de comprobación en ningún lugar a restricciones en el.

modo constructor

Al centrarse en los constructores de cheques

público  de clase ResourcePoolConfig {
   privado String nombre;
   Privada  int maxTotal;
   Privada  int maxIdle;
   Privada  int minidle; 

  Privada ResourcePoolConfig (Constructor Constructor) {
     el presente .name = builder.name;
     el presente .maxTotal = builder.maxTotal;
     el presente .maxIdle = builder.maxIdle ;
     el presente .minIdle = builder.minIdle; 
  } 
  // ... métodos getter omitidas ... 

  // vamos a Generador de diseño de interiores de clase se ha convertido en una especie de ResourcePoolConfig.
  //También podemos generador de clase diseñado para ser independiente clases no ResourcePoolConfigBuilder interior,. 
  pública  estática  clase Constructor {
     privada  estática  final  int DEFAULT_MAX_TOTAL = 8. ;
     privada  estática  final  int DEFAULT_MAX_IDLE = 8. ;
     privada  estática  final  int DEFAULT_MIN_IDLE = 0 ; 

    privada String nombre;
     Privada  int maxTotal = DEFAULT_MAX_TOTAL;
     Privada  int maxIdle = DEFAULT_MAX_IDLE;
     Privada  int minidle = DEFAULT_MIN_IDLE ;

    pública ResourcePoolConfig Construido () {
       // lógica de verificación puso a hacer aquí, incluyendo la verificación requerida, la comprobación de dependencias, y similares restricciones de comprobación 
      SI (StringUtils.isBlank (nombre)) {
         de banda  nueva nuevo una IllegalArgumentException ( ". .. " ); 
      } 
      SI (maxIdle> maxTotal) {
         de banda  nueva nuevo una IllegalArgumentException (" ... " ); 
      } 
      SI (minidle> maxTotal || minidle> maxIdle) {
         de banda  nueva nuevo una IllegalArgumentException (" ... " ); 
      } 

      regreso  nueva nueva ResourcePoolConfig ( el presente ); 
    } 

    públicaConstructor setName (String nombre) {
       si (StringUtils.isBlank (nombre)) {
         lanzar  nuevos IllegalArgumentException ( "..." ); 
      } 
      Esta .name = nombre;
      devolver  este ; 
    } 

    Pública Constructor setMaxTotal ( int maxTotal) {
       si (maxTotal <= 0 ) {
         lanzar  nuevos IllegalArgumentException ( "..." ); 
      } 
      Esta .maxTotal = maxTotal;
      devolver  este ; 
    } 

    Pública Constructor setMaxIdle ( intmaxIdle) {
       si (maxIdle <0 ) {
         lanzar  nuevos IllegalArgumentException ( "..." ); 
      } 
      Esta .maxIdle = maxIdle;
      devolver  este ; 
    } 

    Pública Constructor setMinIdle ( int minidle) {
       si (minidle <0 ) {
         lanzar  nuevos IllegalArgumentException ( "..." ); 
      } 
      Esta .minIdle = minidle;
      devolver  este ; 
    } 
  } 
} 

//Este código será tirar IllegalArgumentException, porque minidle> maxIdle 
ResourcePoolConfig config = nuevo nuevo ResourcePoolConfig.Builder () 
        .setName ( "DBConnectionPool" ) 
        .setMaxTotal ( 16 ) 
        .setMaxIdle ( 10 ) 
        .setMinIdle ( 12 es ) 
        .build ();

Por ajustes de enfoque constructor, y finalmente construir crear el objeto

La diferencia entre el constructor y el patrón de la fábrica

1. El patrón de fábrica es para crear el mismo tipo de una implementación de objeto subclase diferente, en varios estados

2. El constructor se complica por los diferentes parámetros de configuración como se especifica en el paso un objeto complejo (no pasos necesariamente especificados pueden ser pasos separados en el ejemplo anterior interfaz abstracta build)

Supongo que te gusta

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