设计模式实用案例之单例模式

单例模式的应用场景是,在系统中有一些东西提供基础的、固定的服务,不需要灵活的操作和变动,以get操作为主。

所以我们不需要创建类的对象去操作,这样可以提升系统的性能和效率。

比如获取配置文件信息、获取数据库连接池等。

我们来看一下获取配置文件信息的例子:

import com.jfinal.kit.Prop;
import com.jfinal.kit.PropKit;

/**
 * 配置辅助类
 */
public class ConfigUtil {
    private static Prop prop = null;
    static{
        if(prop == null)
            prop = PropKit.use("CPSIS.properties");
    }
    /**
     * 获取实时数据库配置文件属性对象
     * @return
     */
    public static Prop getProp(){
        return prop;
    }
    /**
     * 获取实时数据库实现接口类
     * @return
     */
    public static String getRtdbClassname(){
        return prop.get("rtdb.classname");
    }
  /**
     * 下面还可以有很多其他的静态get函数,我们通过这些函数去获取配置信息
     * @return
     */
  …… }

单例模式需要配合static属性和static方法来使用。因为只有类的static属性和方法才不需要创建变量就能访问,这样我们就能利用这个静态属性去存储我们只需要一个实例的对象。

单例模式主要有如下两个优势:

1)      减少创建Java实例所带来的系统开销

2)      便于系统跟踪单个Java实例的生命周期、实例状态等。

关于静态变量和静态方法的理解,请参考百度。

上文的代码中使用了static块来初始化单例对象,也可以通过静态方法来做:

public class Singleton
    {
        private static Singleton instance;
        private Singleton()
        {
        }
        public static Singleton GetInstance()
        {
            return instance ?? (instance = new Singleton());
        }
    }

补充,hibernate的应用

hibernate中的SessionFactory是一个重量级的类,创建该类的对象实例会耗费比较多的系统资源,如果每次需要时都创建一个该类的实例,显然会降低程序的执行效率,所以经常将对该类的实例化放在一个static{}中,只需第一次调用时执行,提高程序的执行效率,如下:

static {
     try {
   configuration.configure(configFile);
   sessionFactory = configuration.buildSessionFactory();
  } catch (Exception e) {
   System.err.println("%%%% Error Creating SessionFactory %%%%");
   e.printStackTrace();
  }
    }
时间: 2024-10-26 19:01:41

设计模式实用案例之单例模式的相关文章

设计模式实用案例系列说明

设计模式学的时候比较抽象,真正用起来了就比较简单,而且真正常用的其实都是一些简单易用的模式. 但是很多介绍设计模式的资料都是用的示例代码,不具有实际意义,也就不便于理解和记忆. 我在这个系列会用一些项目上实际的案例和代码来总结设计模式,希望真有助于理解. 设计模式种类繁多,这里列举一些在项目上实际应用过的,贪多嚼不烂,有的时候真正掌握的了一些,再看其他的会举一反三. 常用设计模式分类: 1. 创建型 创建对象时,不再由我们直接实例化对象:而是根据特定场景,由程序来确定创建对象的方式,从而保证更大

基于TP5.1实用案例及教程

推荐<基于TP5.1实用案例及教程>书 目录: 通用封装 Export通用封装Import通用封装配合Import通用封装的ImportBaseVerify类Files通用封装Directory通用封装Pdf通用封装Words通用封装Nredis(redis封装)ZipArchives压缩zip文件封装BarQrcode条形码二维码Publics公共方法封装Curls(cUrl请求封装) extend扩展开发 何时编写扩展文件包扩展文件包如何编写 题外话 常用的compose安装一些建议及细节

Java设计模式(二)-单例模式

单例模式建议保证某个对象仅仅只有一个实例,当只有一个对象来协调整个系统的操作时,在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例,总之,选择单例模式就是为了避免不一致状态,避免政出多头. 下面是单例模式的类图:包括的private和static修饰的实例instance.一个private的构造函数.一个static的getInstance函数 单例模式主要有三种:懒汉式单例.饿汉式单例.登记式单例三种 1.饿汉式单例:在类的初始化时候,自行创建了实例 c

设计模式(1)--单例模式(Singleton Pattern)

概述 一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称):当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用:同时我们还将该类的构造函数定义为私有方法,这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例. 特点 根据上面所述,单例模式有如下特点: 单例类只能有一个实例: 单例类必须自己创建自

SQL Delta实用案例介绍,很好的东西,帮了我不少忙

SQL Delta实用案例介绍 概述 本篇文章主要介绍SQL DELTA的简单使用.为了能够更加明了的说明其功能,本文将通过实际项目中的案例加以介绍. 主要容 ?   SQL DELTA 简介 ?   创建SQL DELTA项目 ?   使用SQLDELTA 进行数据库结构同步 ?   使用SQLDELTA进行数据库数据同步 ?   生成数据报表 ?   待续 SQLDELTA简介 SQLDELTA是一款便捷实用的数据库管理工具.使用它可以找到现在数据库项目与过去数据库的异同点.并可以使你的产品

精选19款华丽的HTML5动画和实用案例

下面是本人收集的19款超酷HTML5动画和实用案例,觉得不错,分享给大家. 1.HTML5 Canvas火焰喷射动画效果 还记得以前分享过的一款HTML5烟花动画HTML5 Canvas烟花特效,今天我们要来分享一款类似的HTML5动画效果,一款基于HTML5 Canvas火焰喷射动画.用鼠标拖动一条直线,直线长度表示火焰喷射的力度,另外,火焰在运动中还可以反射效果哦. 在线演示        源码下载 2.HTML5 3D立方体旋转动画 之前我们已经分享一款HTML5 3D正方体旋转动画,可以

java设计模式(二)单例模式 建造者模式

(三)单例模式 单例模式应该是最常见的设计模式,作用是保证在JVM中,该对象只有一个实例存在. 优点:1.减少某些创建比较频繁的或者比较大型的对象的系统开销. 2.省去了new操作符,降低系统内存使用频率,减轻GC压力. 3.保证核心代码的唯一性,比如交易引擎. 单例模式看似是最简单的设计模式. public class Singleton { //私有构造方法,防止实例化 private Singleton(){ } //创建类的实例的时候加载 private static Factory f

jquery,tree无限级树形菜单+简单实用案例

jquery,tree无限级树形菜单+简单实用案例 我在项目中用到产品类别的树形.各种地方都要用. 我就封装起来,方便以后调用. 记录下来,希望给新手们提供帮助.要记得导入jquery.js  tree.js 哦 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri=&quo

大话设计模式读书笔记2——单例模式

单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案. 我们来看一下单例模式下的饿汉模式代码: /// <summary> /// 饿汉模式 /// </summary> public class Singleton { //私有的构造器 private Singleton() {