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)