Patrón de diseño---Patrón de método de fábrica

1 Definición

El patrón del método de fábrica define una interfaz para los objetos creados por el usuario y permite que las subclases que heredan la interfaz decidan instanciar una clase. Un método de fábrica retrasa la instanciación de una clase a sus subclases.

2 Patrón de método de fábrica VS Patrón de fábrica simple

Primero pongo un enlace a un patrón de fábrica simple que escribí . La clase de fábrica en el patrón de fábrica simple contiene la lógica necesaria, y la clase de fábrica genera diferentes instancias de clase de acuerdo con el juicio lógico. Pero para crear una instancia de clase, necesitamos modificar el código de la clase de fábrica simple y agregar juicio lógico, lo que equivale a abrir la extensión de la función y la modificación del código, lo que viola el principio abierto y cerrado.

El patrón del método de fábrica transfiere el juicio lógico al cliente y selecciona diferentes fábricas en el cliente para obtener el objeto instanciado. Cuando necesitamos agregar la creación de un objeto instanciado, solo necesitamos agregar una clase que herede la interfaz de fábrica para crear el objeto instanciado.

La desventaja del patrón de método de fábrica es que se agregarán muchas clases.Si hay muchos objetos instanciados, cada objeto necesita una clase de fábrica para crear especialmente el objeto correspondiente, lo que da como resultado una gran cantidad de clases y aumenta la dificultad de administración.

3 Diagrama de estructura de patrón de método de fábrica

La siguiente figura es el diagrama de estructura del patrón del método de fábrica (de "Dahua Design Patterns").

4 ejemplos de código

El negocio de visualización de código es el mismo que el negocio en el modo de fábrica simple Haga clic en el enlace para ver la introducción específica del negocio.

4.1 Mapeador de la interfaz de objeto que el método de fábrica necesita crear

/**
 * @program: design-pattern-learning
 * @author: zgr
 * @create: 2021-09-01 16:24
 **/
public interface Mapper<T> {

    /**
     * 存储实体到数据库
     *
     * @param entity 存储的实体
     */
    void saveEntity(T entity);
}

4.2 Mapeador de reseñas de comerciantes

/**
 * @program: design-pattern-learning
 * @author: zgr
 * @create: 2021-09-01 16:26
 **/
public class MerchantCommentMapper implements Mapper<MerchantComment> {

    @Override
    public void saveEntity(MerchantComment merchantComment) {
        System.out.println("存储的是审核商户回复内容," + merchantComment.getMerchantName());
    }
}

4.3 Mapeador de comentarios de usuario

/**
 * @program: design-pattern-learning
 * @author: zgr
 * @create: 2021-09-01 16:26
 **/
public class UserCommentMapper implements Mapper<UserComment> {

    @Override
    public void saveEntity(UserComment userComment) {
        System.out.println("存储的是审核用户评论内容," + userComment.getUserName());
    }
}

 4.4 CommonComment de la instancia del objeto que el método de fábrica necesita crear

/**
 * @program: design-pattern-learning
 * @author: zgr
 * @create: 2021-09-01 16:28
 **/
@Data
public class CommonComment {

    private Integer id;

    private String commentContent;

    private String commentResult;
}

4.5 Modelo de comentario de comerciante MerchantComment

@Data
public class MerchantComment extends CommonComment {

    private String merchantName;
}

4.6 Modelo de comentario de usuario Comentario de usuario

/**
 * @program: design-pattern-learning
 * @author: zgr
 * @create: 2021-09-01 16:29
 **/
@Data
public class UserComment extends CommonComment {

    private String userName;
}

4.7 Crear la interfaz de fábrica de Mapper MapperFactory

/**
 * @program: design-pattern-learning
 * @author: zgr
 * @create: 2021-09-10 10:31
 **/
public interface MapperFactory {

    /**
     * 创建mapper实例
     * @return mapper实例
     */
    Mapper createMapper();
}

4.8 Crear una fábrica UserCommentMapperFactory para el mapeador de comentarios de usuario

/**
 * @program: design-pattern-learning
 * @author: zgr
 * @create: 2021-09-10 10:36
 **/
public class UserCommentMapperFactory implements MapperFactory {
    @Override
    public Mapper createMapper() {
        return new UserCommentMapper();
    }
}

4.9 Crear MerchantCommentMapperFactory para MerchantCommentMapperFactory

/**
 * @program: design-pattern-learning
 * @author: zgr
 * @create: 2021-09-10 10:34
 **/
public class MerchantCommentMapperFactory implements MapperFactory {

    @Override
    public Mapper createMapper() {
        return new MerchantCommentMapper();
    }
}

4.10 La interfaz de fábrica CommentFactory que crea una instancia de modelo de comentario

/**
 * @program: design-pattern-learning
 * @author: zgr
 * @create: 2021-09-10 10:40
 **/
public interface CommentFactory {

    /**
     * 创建评论对象实例
     * @return 评论对象实例
     */
    CommonComment createComment();
}

4.11 UserCommentFactory, la fábrica que crea el modelo de comentarios de usuario

/**
 * @program: design-pattern-learning
 * @author: zgr
 * @create: 2021-09-10 10:42
 **/
public class UserCommentFactory implements CommentFactory{
    @Override
    public CommonComment createComment() {
        UserComment userComment = new UserComment();
        userComment.setId(1);
        userComment.setCommentContent("用户评论类容");
        userComment.setCommentResult("用户评论审核结果");
        userComment.setUserName("hello,我是用户评论");
        return userComment;
    }
}

4.12 La MerchantCommentFactory que crea el modelo de comentarios del comerciante

/**
 * @program: design-pattern-learning
 * @author: zgr
 * @create: 2021-09-10 10:42
 **/
public class MerchantCommentFactory implements CommentFactory{
    @Override
    public CommonComment createComment() {
        MerchantComment merchantComment = new MerchantComment();
        merchantComment.setId(1);
        merchantComment.setCommentContent("商户评论类容");
        merchantComment.setCommentResult("商户评论审核结果");
        merchantComment.setMerchantName("hello,我是商户评论");
        return merchantComment;
    }
}

4.13 Programa principal

/**
 * @program: design-pattern-learning
 * @author: zgr
 * @create: 2021-09-10 10:29
 **/
public class MainClass {
    public static void main(String[] args) {
        boolean flag = true;
        while (flag) {
            //模拟接口参数
            Scanner sc = new Scanner(System.in);
            String identity = sc.nextLine();
            if (identity.equals("exit")) {
                System.out.println("退出系统");
                flag = false;
            } else {
                //在客户端代码添加逻辑判断
                if (identity.equals("user")){
                    Mapper mapper = new UserCommentMapperFactory().createMapper();
                    mapper.saveEntity(new UserCommentFactory().createComment());
                }else if (identity.equals("merchant")){
                    Mapper mapper = new MerchantCommentMapperFactory().createMapper();
                    mapper.saveEntity(new MerchantCommentFactory().createComment());
                }else {
                    System.out.println("身份标识参数输入错误");
                    continue;
                }
            }
        }
    }
}

4.14 Resultados de ejecución

5 Resumen

La definición y los ejemplos de código del patrón del método de fábrica se introdujeron anteriormente. Como se puede ver en el ejemplo de código de la Sección 4, el método de fábrica tiene muchas más clases de fábrica que crean instancias de objetos de clase, lo que aumenta la dificultad de la administración.

6 citas

"Patrones de diseño de Big Talk"

7 código fuente

design-pattern-learning/src/com/hz/design/pattern/factory/method en principal · airhonor/design-pattern-learning · GitHub

Supongo que te gusta

Origin blog.csdn.net/honor_zhang/article/details/120217725
Recomendado
Clasificación