单例模式
来源:互联网 发布:淘宝账户怎么修改名字 编辑:程序博客网 时间:2024/05/22 05:18
最近在学习设计模式,思前想后不知从何学起,就从大家最熟悉的单例模式学吧!
下面是我写的单例模式的代码,我感觉比较清晰,大家都能看懂吧。
单例模式我主要觉得应该分为两种,一种是懒汉式,一种是饿汉式。说到这里大家可能不知道区分吧,我就说下自己认为容易理解的话吧。
懒汉式:顾名思义,懒汉就是一说一下,我做一下,就像是懒汉式的代码如下
public class Singleton{
private Singleton(){}
public static Singleton getIntance(){
if(intance == null)
intance = new Singleton();
return intance;
}
private static Singleton intance = null;
}
大家仔细分析getIntance(),这个方法就会发现,供外界访问的就这一个方法,只有当外界访问时,他才会判断这个唯一的实例intance是不是空,为空则初始化,这是不是很像一个懒人呀,要别人在后面赶着走。哈哈
饿汉式:就像是总是吃不饱,在还没用他是,他自己都吃完了,即已经初始化了,下面是饿汉式代码,不知这样说大家能否看懂。
public class Singleton {
private Singleton(){}
public static Singleton getIntance(){
return intance;
}
private static final Singleton intance = new Singleton();
}
接下来我们讨论下为啥要用单例模式,我举个例子,大家应该都打印过东西吧,一个打印机,应该对应一个打印程序,但同时一个打印程序,也可以对应很多打印机。当我们打印时,只要调用打印的方法就行了,即我们可以看成打印程序是个单例类,而打印机是多个访问程序,说的似乎有点乱,笔者语文功底不咋地,各位别介怪。
下面我们来分析下单例模式到底应该怎么写,
以下是我的理解;
1、单例之所以为单例,即限制了他的访问方法必须的唯一的,则我们可以得到那他的构造器必须是私有的,即不能再给外界提供访问权限:private Singleton(){};
2、上面一个我们也说了他要给外界提供访问的方法,则方法不能再是private的了,则应该是public Singleton getIntance(){}
3、因为外部访问时会传个值进来,则单例类本身必须提供一个变量来保存他,且只能实例化一次,即我们应该用static修饰,如private static Singleton intance = null;
4、那么方法就应该改为public Singleton getIntance(){ if(intance == null) intance = new Singleton(); return intance; }
下面为我写的单例模式,两个写到一起了,有点乱,大家别介意呀!
package cn.makemiracle.designmodel;
//单例模式
public class Singleton {
//1.只有一个实体,即只能加载一次,则需要一个私有的构造器
private Singleton(){}
//2.因是私有的构造器,则应该提供一个公外界访问的方法
public static Singleton getIntance(){
//a. 此处分为懒汉式和饿汉式
//a.1 懒汉式,判断值是否为空,为空则初始化
if(intance == null)
intance = new Singleton();
return intance;
}
//3.因需要外界通过方法访问,则必须有一个变量来保存返回的值
private static Singleton intance = null;
//a.2饿汉式,直接在初始化时就给
// private static final Singleton intance = new Singleton();
}
- 单例、单例模式
- 单例模式-多线程单例模式
- 单件模式(单例模式)
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- PHP模式-单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 单例模式(单子模式)
- 设计模式-单例模式
- [设计模式] 单例模式
- Applying QuickFix For Dedicated Client Using OPatch on Siebel 8.1.1.9 causes an error
- Android版本号versionCode,versionName
- iOS第七章 视图和动画
- 数据库事务
- JSP+Servlet 分页
- 单例模式
- android常用源码网站
- 顺序存储---链表的插入与删除。
- 负载均衡会话保持技术、原理、产品(以F5为例)
- 记录一下八款开源 Android 游戏引擎
- mybatis 中属性重名的问题。
- 大厦将倾,互联网将如何变革传统行业(上)
- javascript类型转换分析(Effective javascript笔记)
- Android中继承View的研究(一) -- 一个小Demo