问题:
package DependenceInversionPrinciple.one;
public class Json {
public void studyjava() {
System.out.println("Json study java");
}
public void studyjavascript() {
System.out.println("Json study javascript");
}
public static void main(String[] args) {
Json json=new Json();
json.studyjava();
json.studyjavascript();
}
}
//以上开发方式问题:业务扩展,代码要从底层到高层进行修改,这样会造成系统开发不稳定,带来风险
优化1:
package DependenceInversionPrinciple.two;
public interface ICource {
public void study();
}
package DependenceInversionPrinciple.two;
public class JavaCource implements ICource {
@Override
public void study() {
System.out.println("Json study java");
}
}
package DependenceInversionPrinciple.two;
public class JavaScriptCource implements ICource {
@Override
public void study() {
System.out.println("Json study javascript");
}
}
package DependenceInversionPrinciple.two;
public class Json {
public void study(ICource icource) {
icource.study();
}
}
package DependenceInversionPrinciple.two;
public class Test {
public static void main(String[] args) {
Json json=new Json();
json.study(new JavaCource());
json.study(new JavaScriptCource());
}
}
//这种方式也就是依赖注入
优化2:
package DependenceInversionPrinciple.three;
public interface ICource {
public void study();
}
package DependenceInversionPrinciple.three;
public class Json {
private ICource cource;
public Json(ICource cource) {
this.cource=cource;
}
public void study() {
cource.study();
}
}
//依赖注入构成器方式
package DependenceInversionPrinciple.three;
public class JavaCource implements ICource {
@Override
public void study() {
System.out.println("Json study java");
}
}
package DependenceInversionPrinciple.three;
public class JavaScriptCource implements ICource {
@Override
public void study() {
System.out.println("Json study javascript");
}
}
package DependenceInversionPrinciple.three;
public class Test {
public static void main(String[] args) {
Json json=new Json(new JavaCource());
json.study();
}
}
//依赖注入构成器方式
优化3:
package DependenceInversionPrinciple.four;
public interface ICource {
public void study();
}
package DependenceInversionPrinciple.four;
public class Json {
private ICource cource;
public void setCource(ICource cource) {
this.cource=cource;
}
public void study() {
cource.study();
}
}
//依赖注入setter方式
package DependenceInversionPrinciple.four;
public class JavaCource implements ICource {
@Override
public void study() {
System.out.println("Json study java");
}
}
package DependenceInversionPrinciple.four;
public class JavaScriptCource implements ICource {
@Override
public void study() {
System.out.println("Json study javascript");
}
}
package DependenceInversionPrinciple.four;
public class Test {
public static void main(String[] args) {
Json json=new Json();
json.setCource(new JavaScriptCource());
json.study();
json.setCource(new JavaCource());
json.study();
}
}
//依赖注入setter方式