software que patrones patron method entre ejemplos ejemplo diseño diferencia java spring spring-mvc spring-social springsource

java - que - patron de diseño factory ejemplos



¿Cuál es la diferencia entre el método de fábrica de primavera y el de fábrica? (6)

Es básicamente la misma diferencia entre el método de Fábrica y los patrones de diseño de Fábrica , con una pequeña nota en la parte inferior. Mientras que uno es un método utilizado para obtener instancias de una clase específica, el otro es un objeto de pleno derecho responsable de crear objetos, incluida toda la lógica necesaria para hacerlo.

La documentación de la interfaz de FactoryBean dice:

Interfaz para ser implementada por objetos utilizados dentro de un BeanFactory que son en sí mismos fábricas. Si un bean implementa esta interfaz, se utiliza como una fábrica para la exposición de un objeto, no directamente como una instancia de bean que se expondrá.

Además, este objeto no se utiliza como una instancia de bean , sino como un proveedor de instancia a través de su método getObject .

Actualizar

Al buscar usos del factory-method de factory-method sobre un FactoryBean , parece que se usó con bastante frecuencia con los frijoles singleton heredados, para obtener la instancia subyacente, pero este enfoque no brinda soporte para los métodos de inicialización, como, por ejemplo, un método init que inicializa un conjunto dado de propiedades.

En este caso, debe invocarlo usted mismo antes de usar la clase, definir una envoltura que maneje la inicialización o hacer uso de otros mecanismos como MethodInvokingFactoryBean .

Actualización 2

Estrictamente hablando, un FactoryBean está destinado a gestionar un tipo específico. De hecho, EggPlantFactory un EggPlantFactory , no un VegetableFactory ya que el método getObject definido por la interfaz FactoryBean no admite parámetros.

Soy nuevos manantiales. En la etiqueta Bean encontré atributos de método de fábrica y de frijol de fábrica. ¿Cuál es la diferencia entre el método de fábrica y el de fábrica?

Estoy usando el método de fábrica para llamar a mi método estático getInstance para crear un objeto singleton.

¿Para qué se utiliza el frijol de fábrica?

Para las respuestas dadas, lo que entendí fue

El método de fábrica se usa para llamar a un método estático para crear un objeto en la misma clase de bean.

Factory-bean se utiliza para crear un objeto basado en un patrón de diseño de fábrica.

Ejemplo: - Le estoy pidiendo a un objeto EggPlant de VegetableFactory (que devolverá el objeto vegetal que fue pedido) pasando mi nombre de vegetal (EggPlant en este caso).

Por favor corrija si estoy equivocado?


Puedes encontrar documentación sobre esto aquí . Ver sección 3.2.3.2 y 3.2.3.3.

factory-method se usa para señalar un método estático en código heredado que se puede usar para crear un bean.

Muy similar al uso de un método de fábrica estático para crear un bean, es el uso de un método de fábrica (no estático) de instancia, donde se llama un método de fábrica de un bean existente de la fábrica para crear el nuevo bean.

Para eso es el factory-bean .


Un FactoryBean se utiliza como fábrica para otros beans / objetos. No se puede utilizar como frijol.

El factory-method se puede usar para definir el método que se debe usar para crear este bean (en lugar de llamar al constructor). Un bean con un método de fábrica se puede utilizar como un bean en sí mismo.

Spring puede crear instancias de bean utilizando muchos tipos de fábrica diferentes. Esto es útil si desea integrar bibliotecas / clases heredadas que están vinculadas a un tipo particular.


en la primavera usamos el método de fábrica porque en java la clase predefinida y la clase de definición del uso de algunos no se proporcionan directamente para crear el objeto de otra clase, hay alguna clase abstracta que no podemos crear objeto pero en el lado de la clase hay métodos Allí como la clase Calendar no podemos crear el objeto de la clase Calendar

Calendar cal = new Calendar();

es incorrecto en ese momento su error de entrega pero es el método getInstance() que podemos llamar al método y podemos instanciar la clase

Ejemplo:

Calendar cal=Calendar.getInstance();

Es correcto en ese momento que usamos el método de fábrica en el ejemplo de primavera:

<bean id="cal" class="Calendar" factory-method="getInstance">


método de fábrica:
Como todos ya han explicado, el método de fábrica se usa para decirle al resorte que use el método de fábrica para crear una instancia del objeto.

Nota: el método estático es obligatorio, de lo contrario lanza una excepción.

<bean id="serviceFactory" class="com.test.controller.ServiceFactory" factory-method="getServiceFacrotyWithStaticMethod"/>

haba de fábrica
Cuando no hay un método estático y aún desea crear el objeto utilizando un método no estático, aquí está el truco que se puede hacer usando el bean de fábrica :

<bean id="instanceWithOutStaticMethod" factory-bean="serviceFactory" factory-method="getInstanceWithOutStaticMethod" />

Nota: no se requiere ningún atributo de clase en la definición de resorte anterior.

Clase:

public class ServiceFactory { public static ServiceFactory getServiceFacrotyWithStaticMethod(){ return new ServiceFactory(); } public SdCard getInstanceWithOutStaticMethod(){ return new AdaptorSlot("laptop"); } }


factory-method: represents the factory method that will be invoked to inject the bean. factory-bean: represents the reference of the bean by which factory method will be invoked. It is used if factory method is non-static.

Imprimible.java

package com.javatpoint; public interface Printable { void print(); }

A.java

package com.javatpoint; public class A implements Printable{ @Override public void print() { System.out.println("hello a"); } }

B.java

package com.javatpoint; public class B implements Printable{ @Override public void print() { System.out.println("hello b"); } }

PrintableFactory.java

package com.javatpoint; public class PrintableFactory { //non-static factory method public Printable getPrintable(){ return new A();//return any one instance, either A or B } }

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="pfactory" class="com.javatpoint.PrintableFactory"></bean> <bean id="p" class="com.javatpoint.Printable" factory-method="getPrintable" factory-bean="pfactory"></bean> </beans>

Tenga en cuenta que public Printable getPrintable() de PrintableFactory.java es un método no estático . Generalmente, si queremos el método de acceso / llamada u otros recursos de una clase, tenemos que crear su instancia. Similarmente en eso lo creamos frijol. utilizando la variable de referencia de bean pfactory estamos llamando al método de fábrica getPrintable .