[Uso de Java] Patrón de diseño de Java (dos) patrón de fábrica (Patrón de fábrica)

Contenido de este artículo

1. La definición de modelo de fábrica

En segundo lugar, la clasificación del modelo de fábrica.

En tercer lugar, ¿por qué utilizar el modelo de fábrica?

Cuarto, la implementación del código del patrón de fábrica.

Cinco, el código fuente del modelo de fábrica.


1. La definición de modelo de fábrica

Veamos primero la definición de GOF como modelo de fábrica:

"Defina una interfaz para crear un objeto, pero deje que las subclases decidan qué clase instanciar. El método de fábrica permite que una clase difiera la instanciación a subclases". (Defina una interfaz para crear un objeto en la clase base y deje que la subclase decida qué clase instanciar. El método de fábrica retrasa la instanciación de una clase a subclases).

En segundo lugar, la clasificación del modelo de fábrica.

(1) Modo de fábrica simple (fábrica simple) , también conocido como patrón de método de fábrica estático.

(2) Modo de método de fábrica , también conocido como modo de fábrica polimórfica o modo de constructor virtual;

(3) Modo Abstract Factory (Abstract Factory) , también conocido como modo Toolkit (Kit o Toolkit).

En tercer lugar, ¿por qué utilizar el modelo de fábrica?

(1) Desacoplamiento : separe el proceso de creación y uso de objetos

(2) Reducir la duplicación de código : si el proceso de creación de un objeto es muy complicado y requiere una cierta cantidad de código, y se usa en muchos lugares, habrá mucha duplicación de código.

(3) Reducir los costos de mantenimiento : dado que el proceso de creación es administrado de manera uniforme por la fábrica, se producen cambios en la lógica comercial. No es necesario encontrar todos los lugares donde se debe crear un objeto para modificarlo uno por uno. Solo es necesario modificado en la fábrica para reducir los costos de mantenimiento.

Cuarto, la implementación del código del patrón de fábrica.

Los ejemplos de implementación de código de todos los patrones de diseño se pueden ver en Code Cloud. Si está interesado, puede verificarlo. Dirección de Code Cloud: https://gitee.com/no8g/java-design-patterns

Las siguientes historias se citan a partir de la introducción de 24 patrones de diseño y 6 libros electrónicos de principios de diseño:

Todo el mundo ha oído hablar de la historia de Nuwa remendando el cielo. No quiero hablar de eso hoy. La historia de la creación de seres humanos por Nuwa no es un trabajo de "crear seres humanos". Este término ha sido abusado por la gente moderna. . Esta historia se cuenta en la Diosa que compone los días, hasta una mirada mortal, Wow, el paisaje es demasiado hermoso, el cielo es el
azul Cham , el agua es clara, el aire es fresco, demasiado hermoso, y luego espera el tiempo. Cuando sea grande, me siento un poco solo. No hay animales. Todas estas cosas son estáticas. ¿Qué debo hacer?

No olvides que es un dios, no hay nada que no se pueda hacer, así que Nuwa instaló una estufa de chismes (término técnico: construir una fábrica) y comenzó a crear personas. El proceso específico es así: primero exprime el barro, y luego hornearlo en la estufa de chismes., y luego arrojarlo al suelo para que crezca, pero siempre ocurrirán accidentes:

Es la primera vez que horneo una figurilla de barro. Siento que debería estar cocida. Tírala al suelo, biu ~, un hombre blanco nace, ¡pero no está cocida!

Horneando figuritas de arcilla por segunda vez, Zizizizizizizi ~~, no se cocinó la última vez, esta vez lo hornearé un rato y lo tiraré al suelo, oye, ¡está demasiado cocido, negro!

Horneando figuritas de arcilla por tercera vez, aquí ~ z ~ z ~, mirando mientras hornea, hey, perfecto, ¡perfecto! ¡Excelente producto, raza amarilla! [Nota: las personas de RB no están incluidas en esta lista]

Luego usamos el programa para expresar este proceso, primero definimos un término general para los seres humanos:

/**
 * Created by IntelliJ IDEA.
 *
 * @Author: hjm
 * @Date: 2021/1/26 21:35
 * Stay hungry,stay foolish!
 * 定义一个人类的统称
 */
public interface Human {

    /**
     * 人是愉快的,会笑的,本来是想用smile表示,想了一下laugh更合适,好长时间没有大笑了
     */
    void laugh();

    /**
     * 人类还会哭,代表痛苦
     */
    void cry();

    /**
     * 人类会说话
     */
    void talk();
}

Luego defina la raza específica:

/**
 * Created by IntelliJ IDEA.
 *
 * @Author: hjm
 * @Date: 2021/1/26 21:41
 * Stay hungry,stay foolish!
 * 白色人种
 */
public class WhiteHuman implements Human {
    @Override
    public void laugh() {
        System.out.println("白色人种会大笑,侵略的笑声");
    }

    @Override
    public void cry() {
        System.out.println("白色人种会哭");
    }

    @Override
    public void talk() {
        System.out.println("白色人种会说话,一般都是但是单字节!");
    }
}
/**
 * Created by IntelliJ IDEA.
 *
 * @Author: hjm
 * @Date: 2021/1/26 21:42
 * Stay hungry,stay foolish!
 * 黑色人种,记得中学学英语,老师说black man是侮辱人的意思,不懂,没跟老外说话
 */
public class BlackHuman implements Human {
    @Override
    public void laugh() {
        System.out.println("黑人会笑");
    }

    @Override
    public void cry() {
        System.out.println("黑人会哭");
    }

    @Override
    public void talk() {
        System.out.println("黑人可以说话,一般人听不懂");
    }
}
/**
 * Created by IntelliJ IDEA.
 *
 * @Author: hjm
 * @Date: 2021/1/26 21:37
 * Stay hungry,stay foolish!
 * 黄色人种,这个翻译的不准确,将就点吧
 */
public class YellowHuman implements Human {
    @Override
    public void laugh() {
        System.out.println("黄色人种会大笑,幸福呀!");
    }

    @Override
    public void cry() {
        System.out.println("黄色人种会哭");
    }

    @Override
    public void talk() {
        System.out.println("黄色人种会说话,一般说的都是双字节");
    }
}

También se define la raza, luego definimos el horno Bagua:

/**
 * Created by IntelliJ IDEA.
 *
 * @Author: hjm
 * @Date: 2021/1/26 21:46
 * Stay hungry,stay foolish!
 * 今天讲女娲造人的故事,这个故事梗概是这样的:
 * 很久很久以前,盘古开辟了天地,用身躯造出日月星辰、山川草木,天地一片繁华
 * One day,女娲下界走了一遭,哎!太寂寞,太孤独了,没个会笑的、会哭的、会说话的东东
 * 那怎么办呢?不用愁,女娲,神仙呀,造出来呀,然后捏泥巴,放八卦炉(后来这个成了太白金星的宝贝)中烤,于是就有了人:
 * 我们把这个生产人的过程用Java程序表现出来:
 */
public class HumanFactory {

    /**
     * 定一个烤箱,泥巴塞进去,人就出来,这个太先进了
     */
    public static Human createHuman(Class c) {

        // 定义一个类型的人类
        Human human = null;

        try {
            // 产生一个人种
            human = (Human) Class.forName(c.getName()).newInstance();
        } catch (InstantiationException e) {
            // 你要是不说个人种颜色的话,没法烤,要白的黑的,你说话了才好烤
            System.out.println("必须指定人种的颜色");
        } catch (IllegalAccessException e) {
            // 定义的人种有问题,那就烤不出来了,这是...
            System.out.println("人种定义错误!");
        } catch (ClassNotFoundException e) {
            // 你随便说个人种,我到哪里给你制造去?!
            System.out.println("HD,你指定的人种找不到!");
        }

        return human;
    }
}

Entonces declaramos Nuwa:

/**
 * Created by IntelliJ IDEA.
 *
 * @Author: hjm
 * @Date: 2021/1/26 21:51
 * Stay hungry,stay foolish!
 * 首先定义女娲,这真是额的神呀
 */
public class NvWa {

    public static void main(String[] args) {
        // 女娲第一次造人,试验性质,少造点,火候不足,缺陷产品
        System.out.println("------------造出的第一批人是这样的:白人-----------------");
        Human whiteHuman = HumanFactory.createHuman(WhiteHuman.class);
        whiteHuman.cry();
        whiteHuman.laugh();
        whiteHuman.talk();

        // 女娲第二次造人,火候加足点,然后又出了个次品,黑人
        System.out.println("------------造出的第二批人是这样的:黑人-----------------");
        Human blackHuman = HumanFactory.createHuman(BlackHuman.class);
        blackHuman.cry();
        blackHuman.laugh();
        blackHuman.talk();

        // 第三批人了,这次火候掌握的正好,黄色人种(不写黄人,免得引起歧义),备注:RB人不属于此列
        System.out.println("------------造出的第三批人是这样的:黄色人种-----------------");
        Human yellowHuman = HumanFactory.createHuman(YellowHuman.class);
        yellowHuman.cry();
        yellowHuman.laugh();
        yellowHuman.talk();
    }
}

Cinco, el código fuente del modelo de fábrica.

 

 

 

 ¡fin!

Supongo que te gusta

Origin blog.csdn.net/weixin_44299027/article/details/113196090
Recomendado
Clasificación