package com.cheng.zenofdesignpatterns.principle.dip;
import android.view.View;
import com.cheng.zenofdesignpatterns.ZoDPChapterBaseActivity;
public class ZoDPDependenceInversionPrincipleActivity extends ZoDPChapterBaseActivity {
@Override
protected void initData() {
mTitleTV.setText("依赖倒置原则");
String content = "定义:\n" +
"High level modules should not depend upon low level modules." +
"Both should depend upon abstractions.Abstractions should not " +
"depend upon details.Details should depend upon abstractions.\n" +
"翻译过来,包含三层含义:\n" +
"- 高层模块不应该依赖低层模块,两者都应该依赖其抽象\n" +
"- 抽象不应该依赖细节\n" +
"- 细节应该依赖抽象\n" +
"依赖倒置原则在Java语言中的表现就是:\n" +
"- 模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关" +
"系是通过接口或抽象类产生的\n" +
"- 接口或抽象类不依赖于实现类\n" +
"- 实现类依赖接口或抽象类\n\n" +
"最佳实践\n" +
"依赖倒置原则的本质就是通过抽象(接口或抽象类)使各个类或模块的实现彼此" +
"独立,不互相影响,实现模块间的松耦合,在项目中只要遵循以下的几个规则就可以:\n" +
"- 每个类尽量都有接口或抽象类,或者抽象类和接口两者都具备\n" +
"这是依赖倒置的基本要求,接口和抽象都是属于抽象的,有了抽象才可能依赖倒置\n" +
"- 变量的表面类型尽量是接口或者抽象类\n" +
"- 任何类都不应该从具体类派生\n" +
"- 尽量不要覆写基类的方法\n" +
"如果基类是一个抽象类,而且这个方法已经实现了,子类尽量不要覆写。类间依赖" +
"的是抽象,覆写了抽象方法,对依赖的稳定性产生一定的影响\n" +
"- 结合里氏替换原则使用\n\n" +
"可以得出一个通俗的规则:接口负责定义public属性和方法,并且声明与其他对象的" +
"依赖关系,抽象类负责公共构造部分的实现,实现类准确的实现业务逻辑,同时在适当" +
"的时候对父类进行细化。";
mContentTV.setText(content);
}
public void onClick(View v) {
IDriver zhangSan = new Driver();
ICar benz = new Benz();
// 张三开奔驰车
zhangSan.drive(benz);
ICar bwm = new BWM();
// 张三开宝马车
zhangSan.drive(bwm);
}
}