Java入门之初识设计模式---单列模式
设计模式
是软件开发人员在软件开发过程中面临的一般问题的解决方案
单例模式
目的:使得类的一个对象成为该类系统中的唯一实例
定义:一个类有且仅有一个实例,并且自行实例化向整个系统提供
因此,设计要点是:
某个类只能有一个实例
必须自行创建实例
必须自行向整个系统提供这个实例
实现:
只提供私有的构造方法
含有一个该类的静态私有对象
提供一个静态的公有方法用于创建、获取静态私有对象
代码实现方案:
饿汉式
懒汉式
饿汉式
类加载时,静态实例对象完成了实例化操作;空间换时间。(对象创建过程中实例化)
饿汉式线程安全
新建文件SingletonOne.java
/** * 饿汉式 */ public class SingletonOne { //1.创建类中的私有构造函数 private SingletonOne(){ } //2.创建该类型的私有静态实例 private static SingletonOne instance = new SingletonOne(); //3.创建公有静态方法返回静态实例对象 public static SingletonOne getInstance(){ return instance; } }
新建文件Test.java
public class Test { public static void main(String[] args) { SingletonOne one = SingletonOne.getInstance(); SingletonOne two = SingletonOne.getInstance(); System.out.println(one); System.out.println(two); } }
输出结果可以看到是同一个类的地址。
懒汉式
类加载时并未实例化,第一次使用时才进行实例化;时间换空间。(静态公有方法中实例化)
懒汉式存在线程风险
懒汉式线程安全的解决方案:(此处大致介绍下,后边在线程篇会详细介绍)
同步锁
双重校验锁
静态内部类
枚举
新建文件:SingletonOne.java
public class SingletonTwo { //1.创建私有构造方法 private SingletonTwo(){ } //2.创建静态的该类实例对象 private static SingletonTwo instance = null; //3.创建开放的静态方法提供实例对象 public static SingletonTwo getInstance(){ if(instance == null) instance = new SingletonTwo(); return instance; } }
新建文件Test.java
public class Test { public static void main(String[] args) { SingletonTwo one = SingletonTwo.getInstance(); SingletonTwo two = SingletonTwo.getInstance(); System.out.println(one); System.out.println(two); } }
输出结果同上饿汉式代码
单列模式的特点以及应用场景
优点:
在内存中只有一个对象,节省内存
避免频繁的创建和销毁对象,提高性能
避免对共享资源的多重占用
缺点:
扩展比较困难
如果实例化后的对象长期不利用,系统将默认认为垃圾,进行回收,造成对象状态丢失
使用场景:
创建对象时占用资源过多,但同时又需要用到该类对象
对系统内资源要求统一读写,如读写配置信息
当多个实例存在可能引起程序逻辑错误,如号码生成器

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
添加标签——给定标签选项
HTML: 1 <h3>haveTags</h3> 2 <div id="havetags"></div> 3 <hr /> 4 <h3>addTags</h3> 5 <div id="addtags"></div> 6 <button id="btn">返回的数组</button> CSS: 1 #havetags span, 2 #addtags span { 3 display: inline-block; 4 padding: 0 0 0 10px; 5 margin: 2px 5px; 6 border: 1px solid #000; 7 } 8 9 #havetags span::after, 10 #addtags span::after { 11 content: "+"; 12 display: inline-block; 13 padding: 0 10px; 14 background-color: #00ffff; 15 m...
- 下一篇
第7章—SpringMVC高级技术—不用web.xml,而使用java类配置SpringMVC
不用web.xml,而使用java类配置SpringMVC DispatcherServlet是Spring MVC的核心,按照传统方式, 需要把它配置到web.xml中. 我个人比较不喜欢XML配置方式, XML看起来太累, 冗长繁琐. 还好借助于Servlet 3规范和Spring 3.1的功能增强, 可以采用一种全新的,更简洁的方式配置Spring MVC了. 下面按这种方式一个Hello World的MVC配置. Step 1:先用idea创建一个Maven的WEB工程. pom.xml文件如下: OcrWebAppInitializer: package com.home.config; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; public class OcrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {...
相关文章
文章评论
共有0条评论来说两句吧...