sirve settitle que para java design-patterns factory

para que sirve settitle en java



En términos más simples, ¿qué es una fábrica? (6)

¿Qué es una fábrica?

Wikipedia explica en detalle

También vea la respuesta del legendario here sobre muchos ejemplos de patrones GoF
En palabras simples, Factory crea / initialize / asigna los objetos que puede usar en el código.
por ejemplo, si tiene una persona de clase o interfaz abstracta o incluso una clase concreta y la declara en otra clase, por ejemplo, private person; eso es solo que ese objeto ha sido declarado pero no creado. Usará una inyección nueva o alguna inyección de dependencia o una fábrica para crear este objeto (también hay otras opciones, por ejemplo, el localizador, etc.).

¿Por qué querría usar uno?

Ahora es posible que necesite un tipo específico de persona, por ejemplo, un maestro o incluso una persona podría tener diferentes implantaciones basadas en diferentes configuraciones, etc. El patrón de fábrica se ocupa de esto. Le permite o debería decir que lo libera de preocuparse por la implementación o inicialización de clase particular debe ser utilizada.

¿Qué es una fábrica y por qué querría usar una?


¿Estás familiarizado con JDBC ? Es una y toda (abstracta) fábrica. Es un buen ejemplo del mundo real.

// Factory method. Loads the driver by given classname. It actually returns a // concrete Class<Driver>. However, we don''t need it here, so we just ignore it. // It can be any driver class name. The MySQL one here is just an example. // Under the covers, it will do DriverManager.registerDriver(new Driver()). Class.forName("com.mysql.jdbc.Driver"); // Abstract factory. This lets the driver return a concrete connection for the // given URL. You can just declare it against java.sql.Connection interface. // Under the covers, the DriverManager will find the MySQL driver by URL and call // driver.connect() which in turn will return new ConnectionImpl(). Connection connection = DriverManager.getConnection(url); // Abstract factory. This lets the driver return a concrete statement from the // connection. You can just declare it against java.sql.Statement interface. // Under the covers, the MySQL ConnectionImpl will return new StatementImpl(). Statement statement = connection.createStatement(); // Abstract factory. This lets the driver return a concrete result set from the // statement. You can just declare it against java.sql.ResultSet interface. // Under the covers, the MySQL StatementImpl will return new ResultSetImpl(). ResultSet resultSet = statement.executeQuery(sql);

No necesita tener una sola línea de import específica del controlador JDBC en su código. No es necesario que import com.mysql.jdbc.ConnectionImpl o algo así. Solo tienes que declarar todo en contra de java.sql.* . No es necesario hacer connection = new ConnectionImpl(); tú mismo. Solo tienes que obtenerlo de una fábrica abstracta como parte de una API estándar.

Si hace que el nombre de clase del controlador JDBC sea una variable que pueda configurarse externamente (por ejemplo, archivo de propiedades) y escriba consultas SQL compatibles con ANSI, nunca necesitará reescribir, recompilar, reconstruir y redistribuir su aplicación Java para cada proveedor de bases de datos y / o el controlador JDBC que el mundo conoce. Simplemente debe soltar el archivo JAR del controlador JDBC deseado en el classpath de tiempo de ejecución y proporcionar la configuración mediante algún archivo (propiedades) sin la necesidad de cambiar ninguna línea de código Java siempre que desee cambiar de DB o reutilizar la aplicación en un DB diferente.

Ese es el poder de las interfaces y las fábricas abstractas.

Otro ejemplo conocido del mundo real es Java EE. Sustituya "JDBC" con "Java EE" y "controlador JDBC" con "servidor de aplicaciones Java EE" (WildFly, TomEE, GlassFish, Liberty, etc.).

Ver también:


El patrón de diseño de fábrica es ideal en circunstancias en las que necesita crear varias instancias de un objeto en tiempo de ejecución. En lugar de crear explícitamente cada instancia, puede inicializar muchas instancias. Además, puede encapsular código de creación complejo que puede reutilizarse varias veces.

Ejemplo:

public class Person { int ID; String gender; public Person(int ID,String gender){ this.ID=ID; this.gender=gender; } public int getID() { return ID; } public String getGender() { return gender; } } public class PersonFactory{ public static Person createMale(int id){ return new Person(id,"M"); } public static Person createFemale(int id){ return new Person(id,"F"); } } public class factorytest{ public static void main(String[]args){ Person[] pList= new Person[100]; for(int x=0;x<100;x++){ pList[x]=PersonFactory.createMale(x); } } }

En este ejemplo, encapsulamos los detalles del parámetro de inicialización de género y podemos simplemente pedirle a PersonFactory que cree objetos Masculino o Creador de Persona Fémina.


En términos simples, Factory es un patrón de diseño OO que trata sobre la creación de objetos sin especificar la clase exacta de objeto que se creará.

Una buena razón para usarlo está bien definida en wikipedia :

La creación de un objeto a menudo requiere procesos complejos que no son apropiados para incluir dentro de un objeto de composición. La creación del objeto puede conducir a una duplicación significativa del código, puede requerir información no accesible para el objeto que lo compone, puede no proporcionar un nivel de abstracción suficiente o puede no ser parte de las preocupaciones del objeto que lo compone. El patrón de diseño de método de fábrica maneja estos problemas al definir un método separado para crear los objetos, que las subclases pueden anular para especificar el tipo de producto derivado que se creará.


La fábrica es un objeto, que crea objetos. El uso común incluye dos casos:

  • Cuando desee delegar la elección del objeto concreto a la fábrica, por ejemplo, puede devolver un objeto ya existente (consulte Integer.valueOf() , que es el denominado método de fábrica) o elija una implementación concreta según algunas condiciones: por ejemplo, el argumento proporcionado o las opciones predefinidas (consulte la clase XPathFactory en la API de Java para procesamiento XML )
  • Cuando quieres más flexibilidad para un trabajo universal. No se puede pasar un método o un constructor como argumento (bueno, se puede , pero la reflexión es una mierda), por lo que se usa una fábrica concreta como fuente de objeto (por ejemplo, SomeFactory<T> en un método genérico).