记录一下学习过程中的设计模式七大原则,设计模式精华部分在于分。
Java设计模式-Mr.high
单一职责
一个方法,应该只完成一项功能
一个类,应该只完成一项功能
一个框架,应该只完成一项功能(springMvc、struts2框架简化了MVC操作, hibernate、Mybatis持久层)
一个应用,应该只注重一个领域。
但是java泛型类怎么说…不过貌似也只完成了一项功能…是吧。
开闭原则
对修改关系,对扩展开放。
对于一个已有的功能,我们要保证,在不修改它已经做好的功能的前提下,去扩展新功能,可以通过继承、或者扩展新的方法来实现。
编写代码的时候,一定要记住,有2个角色: 作者、用户。
比如:Dbutils,就是作者的,我们就是用户
依赖倒置原则
粗略来说,类和类之间的关系有三种:继承、关联、依赖。
关联: 一个类的对象作为另外一个类的字段时,就发生了关联关系.
依赖: 一个类的对象作为另外一个类的局部变量时,就发生了依赖关系
https://blog.csdn.net/zhengzhb/article/details/7289269
上层依赖不依赖于下层,他们都是依赖于抽象层,这样下层改了代码,不会影响上层功能。
反例:
// A相对于Mother,A是上层
/*
mama给孩子读书的故事,如果现在要读杂志,应该怎么办?我们可能就要改Mother层,
那如果有一天要教她画画,又要改Mother,这样在复杂的系统里,显然不是一种很好的设计模式
*/
public class A {
public static void main(String[] args) {
Mother mother = new Mother();
mother.read(new Book());
}
}
// Mother相对于Book,Mother是上层
class Mother {
public void read(Book book) {
book.content();
}
// 读杂志
public void readMagazine(Book book) {
book.content();
}
}
class Book {
public void content() {
System.out.println("读书....");
}
}
class Magazine {
public void content() {
System.out.println("读杂志.....");
}
}
正例:
不管要做什么,只有实现接口就行,这就是依赖倒置原则,也就是面向接口编程。
public class B {
public static void main(String[] args) {
Mother01 mother = new Mother01();
mother.read(new Book01());
mother.read(new Magazine01());
}
}
interface Ireader {
void content();
}
class Mother01 {
public void read(Ireader ireader) {
ireader.content();
}
}
class Book01 implements Ireader{
@Override
public void content() {
System.out.println("读书....");
}
}
class Magazine01 implements Ireader{
@Override
public void content() {
System.out.println("读杂志.....");
}
}
接口隔离原则
接口应该建立在最小原则之上!
每个接口都做自己该做的事情,不要在一个接口里做完所有事情。
反例子:
interface Animal {
public void eat();
public void run();
public void fly();
public void siwm();
}
狗属于动
物但是狗却不会飞…飞呀…飞呀
迪米特法则
一个类,对于其它类,应该知道的越少越好! (封装)
场景:往自定义Map里存放数据
反例:我们判断TMap桶的长度、是否发生了碰撞、是否需要采用红黑树…等等一些列步骤
正例:直接调用已经写好的put方法。
里氏代换原则
所有引用基类(父类)的地方必须能透明地使用其子类的对象。
java里面已经实现了。父类与子类已经默认实现了。
合成复用原则
尽量使用对象组合,而不是继承来达到复用的目的。
如果类都是你自己写的,那么随便继承没关系。
如果你调用的是别人的类,那么最好使用对象组合,因为这样别人改了源码不会影响到你。