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

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

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

可能的类或者对象:工厂类  产品: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

posted on 2016-11-07 17:17  Amy-Lee  阅读(288)  评论(0编辑  收藏  举报