六大设计原则
- 单一职责原则
- 里式替换原则
- 依赖倒置原则
- 接口隔离原则
- 迪米特原则
- 开闭原则
迪米特原则
定义:最少知识原则(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 关键字就加上,不要让外部去改变它。
原则:
如果一个方法放在本类中,即不增加类间关系,也对本类不产生负面影响,就放置在本类中。