···
1.错误示范
package com.kris.designmode.principle.dependenceinversion;public class DependenceInversion {public static void main(String[] args) {Person person = new Person();person.receive(new Email());}}/*** 实现一个Person类,接受消息* 方式1分析* 1.简单,比较容易想到* 2.如果获取的对象是微信,短信等,需要增加类,同时Person需要增加相应的接收方法* 3.解决,引入一个抽象的接口IMessage,表示接收的内容,这样Person类与IMessage接口发生依赖* 因为Email,WeiXin 等,属于接收的范围,各自实现IMessage*/class Person{public void receive(Email email){System.out.println(email.getInfo());}}class Email{public String getInfo(){return "email info : hello world";}}
2.正确示范
package com.kris.designmode.principle.dependenceinversion.improve;public class DependenceInversion2 {public static void main(String[] args) {//客户端无需改变Person person = new Person();person.receive(new Email());person.receive(new Wechat());}}/*** Person与IMessage接口发生依赖*/class Person{public void receive(IMessage email){System.out.println(email.getInfo());}}interface IMessage{String getInfo();}class Email implements IMessage{public String getInfo(){return "email info : hello world";}}class Wechat implements IMessage{public String getInfo(){return "wechat info : hello world";}}
3.依赖倒转传递的方式
3.1setter方法注入依赖
package com.kris.designmode.principle.dependenceinversion.improve;public class DependenceInversion3{public static void main(String[] args) {//客户端无需改变Person2 person = new Person2();person.setMessage(new Email2());person.receive();person.setMessage(new Wechat2());person.receive();}}/*** Person与IMessage接口发生依赖,setter方法注入依赖*/class Person2{private IMessage2 message;public void setMessage(IMessage2 message){this.message=message;}public void receive(){System.out.println(message.getInfo());}}interface IMessage2{String getInfo();}class Email2 implements IMessage2{public String getInfo(){return "email info : hello world";}}class Wechat2 implements IMessage2{public String getInfo(){return "wechat info : hello world";}}
3.2构造方法注入依赖
package com.kris.designmode.principle.dependenceinversion.improve;public class DependenceInversion4{public static void main(String[] args) {Person4 person = new Person4(new Email4());person.receive();}}/*** Person与IMessage接口发生依赖,setter方法注入依赖*/class Person4{public IMessage4 message;public Person4(IMessage4 message){this.message=message;}public void receive(){System.out.println(message.getInfo());}}interface IMessage4{String getInfo();}class Email4 implements IMessage4{public String getInfo(){return "email info : hello world";}}
4.注意事项

