[Uso de Java] Padrão de design Java (dois) padrão de fábrica (padrão de fábrica)

Conteúdo deste artigo

1. A definição do modelo de fábrica

Em segundo lugar, a classificação do modelo de fábrica

Terceiro, por que usar o modelo de fábrica

Quarto, a implementação do código do padrão de fábrica

Cinco, o código-fonte do modelo de fábrica


1. A definição do modelo de fábrica

Vejamos primeiro a definição de GOF como o modelo de fábrica:

"Defina uma interface para criar um objeto, mas deixe as subclasses decidirem qual classe instanciar. O Factory Method permite que uma classe adie a instanciação para as subclasses." (Defina uma interface para criar um objeto na classe base e deixe a subclasse decidir qual classe instanciar. O método de fábrica atrasa a instanciação de uma classe para subclasses.)

Em segundo lugar, a classificação do modelo de fábrica

(1) Modo Simple Factory (Simple Factory) , também conhecido como Static Factory Method Pattern.

(2) modo Factory Method , também conhecido como modo Polymorphic Factory ou modo Virtual Constructor;

(3) Modo Abstract Factory (Abstract Factory) , também conhecido como modo Toolkit (Kit ou Toolkit).

Terceiro, por que usar o modelo de fábrica

(1) Decoupling : Separe o processo de criação e uso de objetos

(2) Reduzir a duplicação de código : Se o processo de criação de um objeto for muito complicado e exigir uma certa quantidade de código, e for usado em muitos lugares, haverá muita duplicação de código.

(3) Reduzir os custos de manutenção : Como o processo de criação é gerenciado uniformemente pela fábrica, ocorrem mudanças na lógica de negócios. Não há necessidade de encontrar todos os locais onde um objeto precisa ser criado para ser modificado um por um. Ele só precisa ser modificado na fábrica para reduzir custos de manutenção.

Quarto, a implementação do código do padrão de fábrica

Os exemplos de implementação de código de todos os padrões de design podem ser visualizados no Code Cloud. Se estiver interessado, você pode conferir. Endereço do Code Cloud: https://gitee.com/no8g/java-design-patterns

As histórias a seguir são citadas a partir da introdução de 24 padrões de design e 6 e-books de princípios de design:

Todo mundo já ouviu falar da história de Nuwa remendando o céu. Não quero falar sobre isso hoje. A história da criação de seres humanos por Nuwa não é o trabalho de "criar seres humanos". Este termo tem sido abusado por pessoas modernas . Essa história é contada na Deusa maquiar os dias, até um olhar mortal, Nossa, a paisagem é linda demais, o céu é o
azul Cham , a água é límpida, o ar é fresco, lindo demais, e aí espera o tempo Quando eu crescer, me sinto um pouco solitário. Não há animais. Todas essas coisas são estáticas. O que devo fazer?

Não se esqueça que é um deus, não há nada que não possa ser feito, então Nuwa montou um fogão de fofocas (termo técnico: construir uma fábrica) e começou a criar pessoas. O processo específico é assim: primeiro aperte o lama, e depois asse no fogão de fofoca., E depois jogado no chão para crescer, mas sempre ocorrerão acidentes:

É a primeira vez que asso uma estatueta de barro. Acho que deveria ser cozida. Jogue no chão, biu ~, nasceu um homem branco, mas não está cozido!

Fazendo bonecos de barro pela segunda vez, Zizizizizizizi ~~, não cozinhou da última vez, dessa vez vou assar um pouquinho e jogar no chão, ei, já passou, negão!

Estatuetas de argila assando pela terceira vez, aqui ~ z ~ z ~, observando enquanto assam, ei, na medida certa, perfeito! Excelente produto, raça amarela! [Nota: pessoas RB não estão incluídas nesta lista]

Então usamos o programa para expressar este processo, primeiro definimos um termo geral para 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();
}

Em seguida, defina a raça 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("黄色人种会说话,一般说的都是双字节");
    }
}

A raça também é definida, então definimos o forno de 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;
    }
}

Então, 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, o código-fonte do modelo de fábrica

 

 

 

 fim!

Acho que você gosta

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