设计模式-六大设计原则(一)

初谈设计模式

设计模式是对面向对象的代码设计经验总结,是在编程领域被反复使用、被多人知晓、而且经过分类整理的代码设计方法。设计模式是一种思想,既有既定的结构图和基本程序代码,但也不能照本宣科,需要根据需求尝试着变通以达到编码目的。

单一职责原则

刚开始学习写程序时,总是习惯把很多方法写到一个类中,从而导致了类变得越来越复杂,这种是不可取的,因为当需要修改代码时,翻阅着成千上万行的代码会有一种想死的感觉,这里就需要设计模式的单一职责原则。

单一职责原则的定义是:对于一个类,应该只有一个引起它变化的原因,解释来说就是,例如一个带有缓存功能图片加载类,能引起它变化的原因有两个,一个是当缓存功能需要修改时,二是当图片加载功能需要修改时,这两个原因都需要修改本类,所以本类是不符合单一职责原则的,此时需要把缓存和图片加载功能分开成为两个类来写更好一些。

里氏代换原则

里氏代换原则涉及到类的继承。继承能把父类多元化,产生多种子类,而有都保留了父类的公共特征。

里氏代换原则的定义是:子类型必须能够替换掉它们的父类型。如果一个子类继承自父类,那么这个子类就能以父类的身份出现。例如一个软件实体使用了一个父类,那么就肯定适用于其子类,而且那个软件实体还察觉不出来子类对象与父类对象的区别。

里氏代换的精髓

举个例子:一个老木匠,周围人都知道他,经常去到他家做家具,而这个木匠还有个不为人知的徒弟,不但学会了老木匠的本事,还自己研究了一套装饰家具的技能。老木匠接到任务后如果他不想做,他可以请他的徒弟来做,对于那些请木匠做家具的人来说,他们并不知道是谁做的,代码可以这样实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//老木匠类
public class OldCarpenter {
public abstract void MakeFurniture() {
System.out.println("做一把椅子");
}
}
//老木匠的徒弟类
public class YoungFurniture extends OldCarpenter {
@Override
public void MakeFurniture(){
super.MakeFurniture();
System.out.println("装饰了一把椅子");
}
}

对于客户们:

1
2
3
4
5
6
7
8
9
public static void main(String[] args){
//老木匠做家具
OldCarpenter carpenter = new OldCarpenter();
carpenter.MakeFurniture();

//他徒弟做家具
carpenter = new YoungFurniture();
carpenter.MakeFurniture();
}

总结

满足里氏代换原则后,子类可以代替父类出现,而不影响程序的功能,而且子类可以在父类的基础上添加新功能,但如果子类改写父类太多的代码,那最好断绝父子关系。