设计模式学习笔记(一) 单例模式
设计模式
详细
百度百科
https://baike.baidu.com/item/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1212549?fr=aladdin
维基百科
https://zh.wikipedia.org/wiki/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F_(%E8%AE%A1%E7%AE%97%E6%9C%BA)
博客园
https://www.cnblogs.com/tongkey/p/7170826.html
慕课网
https://www.imooc.com/learn/112
------------------------------------------------------------------------------------------------------------------------------------------------
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。
使用设计模式的目的:
为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。
设计模式使代码编写真正工程化;
设计模式是软件工程的基石脉络,
如同大厦的结构一样。
综述
设计模式分为三种类型,共23种。
------------------------------------------------------------------------------------------------------------------------------------------------
单例模式
有些对象只需要一个配置文件,工具类,线程池,缓存,日志对象等
创造多个实例,会产生问题
单例模式就是来确保某个实例有且只有一个
- 懒汉模式
- 饿汉模式
Singleton.java
package com.imooc; /* * 单例模式Singleton * 应用场合:有些对象只需要一个就足够了,如古代皇帝、老婆 * 作用:保证整个应用程序中某个实例有且只有一个 * 类型:饿汉模式、懒汉模式 */ public class Singleton { //1.将构造方法私有化,不允许外部直接创建对象 private Singleton(){ } //2.创建类的唯一实例,使用private static修饰 private static Singleton instance=new Singleton(); //3.提供一个用于获取实例的方法,使用public static修饰 public static Singleton getInstance(){ return instance; } }
Singleton2.java
package com.imooc; /* * 懒汉模式 * 区别:饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,线程安全 * 懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢,线程不安全 */ public class Singleton2 { //1.将构造方式私有化,不允许外边直接创建对象 private Singleton2(){ } //2.声明类的唯一实例,使用private static修饰 private static Singleton2 instance; //3.提供一个用于获取实例的方法,使用public static修饰 public static Singleton2 getInstance(){ if(instance==null){ instance=new Singleton2(); } return instance; } }
Test.java
package com.imooc; public class Test { public static void main(String[] args) { //饿汉模式 Singleton s1=Singleton.getInstance(); Singleton s2=Singleton.getInstance(); if(s1==s2){ System.out.println("s1和s2是同一个实例"); }else{ System.out.println("s1和s2不是同一个实例"); } //懒汉模式 Singleton2 s3=Singleton2.getInstance(); Singleton2 s4=Singleton2.getInstance(); if(s3==s4){ System.out.println("s3和s4是同一个实例"); }else{ System.out.println("S3和s4不是同一个实例"); } } }