以前我们A类引用B类的时候,需要new出B类的一个实例,这种方式其实是有很多问题的,因为耦合性太高了,不利于后期代码的扩展和维护。
现在调用其他对象的时候,我们使用IOC容器,相当与一个工厂
工厂模式:根据我们提供的我们所需对象的实例描述,为我们返回所需要的产品
四要素:
1.产品的规范 接口
2.产品 产品要实现接口
3.工厂 负责与客户进行交互的
4。客户端/调用
下面是一个简单的工厂模式的小例子
架构:
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();
}
}
运行结果:
猫喜欢吃老鼠
猫喜欢睡觉