设计模式小笔记
六大基本原则
- 单一职责原则:一个类的功能尽量单一(高内聚)。
- 开闭原则:一个类的扩展是开放的,一个类的修改是封闭的。尽量通过扩展的方式来实现新的功能而不是修改已有的代码。因为修改原有代码可能破坏原有的系统。
- 里氏替换原则:通俗来讲,使用子类来实例化父类,那么必须保证父类的所有代码(变量和方法)可以正常执行。一般来说,重写父类的方法会产生这个问题。因此一般要重写父类方法,尽量将父类方法声明为抽象方法。
- 依赖倒置原则:依赖于抽象进行编程,即上层模块尽量以接口的形式引用下层模块。否则上层模块很难复用。
- 接口隔离原则:将接口定义为最小的、更具体的甚至到不可拆分的地步。否则实现接口的时候会出现必须实现不需要的方法的情况。
- 迪米特原则:一个对象对另一个对象应该了解最少。比如说当一个对象调用另一个对象时,最好是直接使用其方法,而不是根据它的成员变量和方法自己再写一套代码逻辑。例子参考迪米特法则
单例模式
定义
确保单例类只有一个实例,并且这个单例类提供一个函数接口让其他类获取到这个唯一的实例。
为了确保只有一个实例,我们声明私有的构造方法,并使用static创建一个静态实例。这样就保证了其他地方没法使用构造方法,永远最多只有一个实例。当某个类的创建需要消耗大量资源,或者用来控制某些共享资源(数据库或者文件)的时候就可以使用单例模式。
另外单例模式又有两种实现方式。
饿汉模式:
即在声明的时候就将其进行初始化,这种是最简单的方式并且天生线程安全,但是不推荐,因为一般来说使用单例模式的类占用资源都不少,尽量等到使用的时候再将其初始化,代码如下:
public class Singleton {
private Singleton() {} //私有的空构造方法
private static final Singleton instance = new Singleton1(); //创建静态的且唯一的实例
public static Singleton getInstance() {
return instance;
}
}