六大设计原则
- 单一职责原则
- 里式替换原则
- 依赖倒置原则
- 接口隔离原则
- 迪米特原则
- 开闭原则
迪米特原则
定义:最少知识原则(Least Knowledge Principle,简称 LKP),一
个类对自己需要耦合或者调用的类应该知道的最少。
引出问题:
类图描述的就是客户端(Client)使用安装器安(InstallSoftware)装压缩包(Wizard)的关系。
- 看看下面的坏的代码:
public class InstallSoftware {
public void installWizard(Wizar wizard){
int first = wizard.first();
//根据first返回的结果,看是否需要 if(first>50){
int second = wizard.seco if(second>50){
int third = wizard.th if(third >50){
wizard.first();
}
}
}
-
分析:
这样的耦合是极度不合适的,迪米特法则就要求类“小气”一点,尽量不要对外公布太多的 public 方法和非静态的 public 变量,尽量内敛,多使用 private,package-private、protected 等访问权限。 -
修改后的代码:
/**
*安装类
*/
public class InstallSoftware {
public void installWizard(Wizard wizard){
//不废话,直接调用
wizard.installWizard();
}
}
/**
*压缩包类
*/
public class Wizard {
private Random rand = //第一步
private int first(){
System.out.printl return rand.nextIn
}
//第二步
private int second(){
System.out.printl return rand.nextIn
}
//第三个方法
private int third(){
System.out.printl return rand.nextIn
}
//软件安装过程
public void installWiz int first = this.f //根据first返回的结果 if(first>50){
int second = th if(second>50){
int third = if(third >5 this.fir
}
}
}
- 结论
这样我们的程序就做到了弱耦合,一个类公布越多的 public属性或方法,修改的涉及面也就越大,也就是变更引起的风险就越大。因此为了保持朋友类间的距离,你需要做的是:减少 public 方法,多使用 private、package-private(这个就是包类型,在类、方法、变量前不加访问权限,则默认为包类型)protected 等访问权限,减少非 static 的 public 属性,如果成员变量或方法能加上 final 关键字就加上,不要让外部去改变它。
原则:
如果一个方法放在本类中,即不增加类间关系,也对本类不产生负面影响,就放置在本类中。
网友评论