依赖注入解耦

上层不依赖于下层的实现，依赖于下层的接口