大家好,我是鳄鱼杆。
前段时间,休息了也有一段时间了,感觉自己都快废掉了。所以嘛,决定来段“康复运动”,恢复一下思维。
今天,借着这个机会,分享一下设计模式的练习。
概要
1、 为什么使用设计模式?
- 提供了软件开发过程中面临的一般问题的最佳解决方案。
- 有助于经验不足的开发人员通过一种简单快捷的方式来学习软件设计。
2、基本原则:
- 对接口编程而不是对实现编程。
- 优先使用对象组合而不是继承。
以上这两句可以说是,设计模式的地基,理解了它,那设计模式就是妥妥的。
小小解析一下:
- 对接口编程可以更广泛化编写规定,进而约束实现
- 优先使用对象组合,减少对象耦合性
整体的设计模式
- 根据设计模式的参考书 《Design Patterns - Elements of Reusable Object-Oriented Software》(中文译名:设计模式 - 可复用的面向对象软件元素) 中所提到的,总共有 23 种设计模式。
这些模式可以分为三大类:
- 创建型模式(Creational Patterns)
- 结构型模式(Structural Patterns)
- 行为型模式(Behavioral Patterns)
技术名词解释
图片展示
技术细节–单例模式
1、介绍
-
意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
-
主要解决:一个全局使用的类频繁地创建与销毁。
-
何时使用:当您想控制实例数目,节省系统资源的时候。
-
如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。
关键代码:构造函数是私有的。
从最简单的开始,注意点:
- 单例类 只能有一个实例。
- 单例类 必须自己创建自己的唯一实例。
- 单例类 必须给所有其他对象提供这一实例。
换言之,
单例类定义一个方法,用于生产自己唯一的实例,并对外开放。
2、代码测试–饿汉式单例
/**
* @version v1.0
* @ClassName:Singleton
* @Description:单例类
* @Author:crocodilePole
*/
public class Singleton {
private Singleton(){}
private static Singleton instance ;//= new Singleton();
//静态代码块加载类时,生成单例实例
static{
instance = new Singleton();
}
public static Singleton getInstance(){
return instance;
}
}
3、代码测试–懒汉式单例
/**
* @version v1.0
* @ClassName:Singleton
* @Description:单例类
* @Author:crocodilePole
*/
public class Singleton {
private Singleton(){}
//问题:多线程访问问题
private static Singleton instance;
public static Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
private static class SingletonHolder{
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance(){
return SingletonHolder.INSTANCE;
}
}
小结
单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供了一个全局访问点来访问该实例。示意图