依赖倒转原则
普通方式
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class DependecyInversionPutong { public static void main(String[] args) { new Person().receiver(new Email()); } } class Email { public String getInfo() { return "email content is " + "hello world"; } } class Person { public void receiver(Email email){ System.out.println(email.getInfo()); } }
升级方式
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class DependecyInversion { public static void main(String[] args) { new Person().receiver(new Email()); } } interface IReceiver { public String getInfo(); } class Email implements IReceiver { public String getInfo() { return "email content is " + "hello world"; } } class Person { public void receiver(IReceiver receiver) { System.out.println(receiver.getInfo()); } }
依赖关系传递的三种方式
public class DependencyPass { public static void main(String[] args) { // TODO Auto-generated method stub ChangHong changHong = new ChangHong(); // OpenAndClose openAndClose = new OpenAndClose(); // openAndClose.open(changHong); //通过构造器进行依赖传递 // OpenAndClose openAndClose = new OpenAndClose(changHong); // openAndClose.open(); //通过setter方法进行依赖传递 OpenAndClose openAndClose = new OpenAndClose(); openAndClose.setTv(changHong); openAndClose.open(); } } // 方式1: 通过接口传递实现依赖 // 开关的接口 // interface IOpenAndClose { // public void open(ITV tv); //抽象方法,接收接口 // } // // interface ITV { //ITV接口 // public void play(); // } // // class ChangHong implements ITV { // // @Override // public void play() { // // TODO Auto-generated method stub // System.out.println("长虹电视机,打开"); // } // // } //// 实现接口 // class OpenAndClose implements IOpenAndClose{ // public void open(ITV tv){ // tv.play(); // } // } // 方式2: 通过构造方法依赖传递 // interface IOpenAndClose { // public void open(); //抽象方法 // } // interface ITV { //ITV接口 // public void play(); // } // class OpenAndClose implements IOpenAndClose{ // public ITV tv; //成员 // public OpenAndClose(ITV tv){ //构造器 // this.tv = tv; // } // public void open(){ // this.tv.play(); // } // } // 方式3 , 通过setter方法传递 interface IOpenAndClose { public void open(); // 抽象方法 public void setTv(ITV tv); } interface ITV { // ITV接口 public void play(); } class OpenAndClose implements IOpenAndClose { private ITV tv; public void setTv(ITV tv) { this.tv = tv; } public void open() { this.tv.play(); } } class ChangHong implements ITV { @Override public void play() { // TODO Auto-generated method stub System.out.println("长虹电视机,打开"); } }
依赖倒转原则的注意事项和细节