设计模式七大原则

记录一下学习过程中的设计模式七大原则,设计模式精华部分在于分。

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里面已经实现了。父类与子类已经默认实现了。

合成复用原则

尽量使用对象组合,而不是继承来达到复用的目的。

如果类都是你自己写的,那么随便继承没关系。

如果你调用的是别人的类,那么最好使用对象组合,因为这样别人改了源码不会影响到你。

你可能感兴趣的:(设计模式)