一、控制反转
将组件对象的控制权从代码本身转移到外部容器
组件化的思想:分离关注点,使用接口,不再关注实现
目的:解耦合。实现每个组件时,只关注组件内部的事情。
要点:明确定义组件间的接口。
依赖注入:将组件的构建和使用分开
二、工厂模式
Animal接口
package interf;
public interface Animal {
public void eat();
public void sport();
}
Cat
package model;
import interf.Animal;
public class Cat implements Animal {
@Override
public void eat() {
System.out.println("猫喜欢吃鱼");
}
@Override
public void sport() {
System.out.println("猫喜欢上树");
}
}
Dog
package model;
import interf.Animal;
public class Dog implements Animal {
@Override
public void eat() {
System.out.println("狗喜欢吃骨头");
}
@Override
public void sport() {
System.out.println("狗喜欢奔跑");
}
}
Factory
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;
}
}
}
FactoryTest
package test;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
import interf.Animal;
import model.Factory;
class FactoryTest {
@Test
void test() {
Factory facotry = new Factory();
Animal animal = null;
animal = facotry.getAnimal("cat");
animal.eat();
animal.sport();
}
}