耽搁了许久终于决定开个博客,没事写点东西记录一下,记录生活点滴、或是技术总结、或是工作时遇到的问题及解决方式。刚好最近项目不赶了,上班时间可以看点书,以往看书总是看完就过去了,现在觉得还是要边看边总结记录,可以增强自己对所学知识的理解,以后也可以时习之,再次回顾一下。好了,进入正题吧,今天看的是大话设计模式的迪米特法则。
在面向对象编程中,类之间的相互调用是很常见的,我们经常需要在一个类中访问另一个类的成员或方法。问题是,如果类经常被调用的话,我们就要考虑到代码的可维护性和复用性。程序中代码的耦合过高可不是一件好事。我之前编程习惯也是喜欢面向过程来写代码,项目比较忙的时候我只是要实现想要做的功能就可以了,却忽略了类之间的分化,代码写多了就看起来乱乱的,修改也很困难,容易出错。书中所说的面向接口编程即是考虑提取出通用的接口方法来供功能类使用,以尽量减少类与类之间的耦合。
所以,迪米特法则的定义就是,如果两个类不必彼此直接通信,那么这两个类就不应当直接的相互作用,如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。迪米特法则首先强调的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限,也就是说,一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开。而需要公开的字段,通常就用属性来体现,这也是面向对象的封装思想。在面向对象的设计原则中很多都是体现出面向对象的三大特性。迪米特法则其根本思想,是强调了类之间的松耦合。在程序设计时,类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。如下代码,定义某公司的IT部门接口,有小张和小李员工实现了部门接口,别的部门人可以调用。
//IT部门接口,定义安装系统和修电脑方法
interface ItDepartment {
void installSystem();
void fixComputer();
}
//IT部门员工小张
class Xiaozhang implements ItDepartment {
@Override
public void installSystem() {
System.out.println("小张在给你安装系统");
}
@Override
public void fixComputer() {
System.out.println("小张在给你修电脑");
}
}
//IT部门员工小李
class Xiaoli implements ItDepartment {
@Override
public void installSystem() {
System.out.println("小李在给你安装系统");
}
@Override
public void fixComputer() {
System.out.println("小李在给你修电脑");
}
}
//其它部门员工小王
class Xiaowang {
public void managerPc(ItDepartment it) {
it.installSystem();
it.fixComputer();
}
}
//测试
public static void main(String[] args) {
ItDepartment xl = new Xiaoli();
ItDepartment xz = new Xiaozhang();
Xiaowang xw = new Xiaowang();
xw.managerPc(xz);
xw.managerPc(xl);
}
打印出结果:
小张在给你安装系统
小张在给你修电脑
小李在给你安装系统
小李在给你修电脑