zoukankan      html  css  js  c++  java
  • java设计模式之 工厂模式Factory

    好比某种套路,经过不断实践,证明对项目结构非常有利

    如果需要获取某种对象,如同获取不同的产品

    需要由工厂来提供,工厂模式

    可能的类或者对象:工厂类  产品:Cat  Dog  Fish ...

    //动物工厂  专门用于获取动物实例

    class AnimalFactory{

      public static Animal getAnimal(int msg){

        Animal a1 = null;

        if(msg == 1){

          a1 = new Cat();

        }else if(msg == 2){

          a1 = new Dog();

        }else if(msg == 3){

          a1 = new Fish();

        }else{

          System.out.println("无效的消息!");

        }

        return a1;

      }

    }

    如何使用:

    实际应用中,代码只和工厂AnimalFactory、父类Animal有关,而与具体的子类无关。更加通用,降低了代码的耦合度。

    main:  Animal a1 = AnimalFactory.getAnimal(1);

            Animal a2 = AnimalFactory.getAnimal(2);

    原先代码:和具体子类Cat和Dog有关 耦合度高

        Animal a1 = new Cat();

        Animal a2 = new Dog();

    (3)一视同仁

    需求:让所有的动物吃"哈根达斯"

    a1.eat("哈根达斯");

    a2.eat("哈根达斯");

    a3.eat("哈根达斯");

    ...

    如果用数组将所有的动物管理起来?

    Cat[]    Dog[]   Fish[]  ...

    只要一个数组:

    Animal[]  可以管理任何Animal以及子类对象

    任何的子类 is-a Animal

    Animal[] as = new Animal[5];

    as[0] = new Cat(101, "加菲猫", 3);

    as[1] = new Cat(102, "汤姆猫", 1);

    as[2] = new Dog(103, "史努比", 5);

    as[3] = new Fish(104, "沙丁鱼", 2);

    as[4] = new Mouse(105, "米老鼠", 3);

    for(int i=0; i<as.length; i++){

       as[i].eat("哈根达斯");

    }

    满足:多态定理2   元素认为Animal类型  Animal[]


            多态定理3

  • 相关阅读:
    Centos7安装
    Nacos启动命令
    SpringCloud与SpringBoot版本冲突导致入住Zookeeper失败
    RabbitMQ延迟机制
    RabbitMQ消息的可靠性
    基于Java的交换机与队列创建
    一、使用RabbitMQ传递对象
    在SpringBoot应用中使用MQ
    在普通的Maven应用中使用MQ
    RabbitMQ工作模式,交换机和队列管理
  • 原文地址:https://www.cnblogs.com/blueskylcc/p/6039679.html
Copyright © 2011-2022 走看看