以前我们A类引用B类的时候,需要new出B类的一个实例,这种方式其实是有很多问题的,因为耦合性太高了,不利于后期代码的扩展和维护。

现在调用其他对象的时候,我们使用IOC容器,相当与一个工厂

工厂模式:根据我们提供的我们所需对象的实例描述,为我们返回所需要的产品

四要素:

1.产品的规范   接口

2.产品  产品要实现接口

3.工厂   负责与客户进行交互的

4。客户端/调用  

下面是一个简单的工厂模式的小例子

架构:Spring框架-IOC容器_工厂模式

 Spring框架-IOC容器_qt_02

 

 

 

package interf;

//规范
public interface Animal {
  public void eat();

  public void sport();
}

 

package model;

import interf.Animal;

public class Cat implements Animal {

@Override
public void eat() {
    System.out.println("猫喜欢吃老鼠");

  }

@Override
public void sport() {
    System.out.println("猫喜欢睡觉");

  }

}

 

package model;

import interf.Animal;

public class Dog implements Animal {

@Override
public void eat() {
    System.out.println("狗喜欢吃骨头");

  }

@Override
public void sport() {
    System.out.println("狗喜欢奔跑");

  }

}

package model;

import interf.Animal;

//工厂
public class Factory {
  //字符串常量,负责与调用者进行交互
  public static final String CAT = "cat";
  public static final String DOG = "dog";

  // 模拟用户的调用
  public Animal getAnimal(String str) {
    if (CAT.equals(str)) {
      return new Cat();
    } else if (DOG.equals(str)) {
      return new Dog();
    } else {

      return null;
    }

  }
}

 

package test;

import interf.Animal;
import model.Factory;

public class FactoryTest {
  public static void main(String[] args) {
    Factory fac=new Factory();
    Animal animal=null;//用来接收返回来的对象
    animal = fac.getAnimal("cat");
    animal.eat();
    animal.sport();
  }
}

 

运行结果:

猫喜欢吃老鼠
猫喜欢睡觉