//单例模式:饿汉式和懒汉式
//单例模式 /*
设计模式:解决某一类问题行之有效的解决办法(思想)。
单例(Singleton):设计模式:
学习设计模式必须先弄清楚它是解决什么问题的。 单例模式是解决什么问题的?
可以保证一个类的对象唯一性。 场景:比如多个程序都要使用一个配置文件中的数据,而且要实现
数据共享和交换。必须要将多个数据封装到一个对象中。而且
多个程序操作的是同一个对象。那也就是说必须保证这个配置
文件的唯一性。 怎么能保证对象的唯一性呢?
1,一个类只要提供了构造函数就可以产生多个对象,
完全无法保证唯一。
既然数量不可控,干脆,不让其他程序建立对象。 2,不让其他程序创建对象,对像何在?
干脆,自己在本类中创建一个对象,这样好处是什么,可控!. 3,创建完成后,是不是要给其他程序提供访问的方式。 怎么实现这个步骤呢?
1,怎么就能不让其他程序创建对象呢?
直接私有化构造函数。不让其他程序创建的对象初始化,这样其他程序就
不能创建对象了,但是在卑劣中还是可以创建本类对象的。
2,直接在本类中new一个本类对象。
3,定义一个功能,其他程序可以通过这个功能获取到本类的对象。
*/
//代码体现。 //【调用方法时,对象已经产生了】
//饿汉式。
class Single
{
//私有化构造函数。
private Single(){} //2,创建一个本类对象。
private static /*final*/ Single s = new Single();//因为getInstance方法是
//静态的,所以这个方法只能
//访问静态的,所以这里必须
//加静态关键字修饰。
//因为这个对象s是静态的,可以由其他
//程序直接有类名调用,但是这样不安全,
//对象不可控,所以为了不让其他程序直接
//通过类名的方式来调用,加了private
//关键字。 //3,定义一个方法返回这个对象。
public static Single getInstance(int x)
{
//因为这个方法是要返回一个对象,
//就是为了让其他程序获取这个对象的
//所以这个方法的权限要足够大,所以
//为public的。
if(x<0)
return s;
else
return null;
}
} //单例的延迟加载方式。(单例:单独的对象)【拿到方法的时候,才产生对象】
//懒汉式。
class Single2
{
private static Single2 s2 = null; private Single2(){}//私有化构造函数。 public static Single2 getInstance()
{
if(s2==null)
s2 = new Single2();
return s2;
}
} class SingleDemo
{
public static void main(String[] args)
{
//要想获取Single的对象,调用geiInstance方法,
//既然无法通过对象调用,只能用类名调用,那么
//这个方法必须是静态的 Single ss = Single.getInstance(2);
Single ss2 = Single.getInstance(3);
System.out.println(ss == ss2);//返回true,可以知道ss 和 ss2 指向同一个对象。 Single2 s = Single2.getInstance();
Single2 s1 = Single2.getInstance();
System.out.println(s == s1);//返回true,可以知道s 和 s1 指向同一个对象。
}
} /*
在饿汉式中可以在本类中创建本类对象时加入final关键字,但是在
懒汉式中不可以,试分析其原因。
*/

《Java中的单例模式--两种》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. eclipse快捷方式

    虽说右键可以直接发送快捷方式到桌面,但是点击桌面图标确提示错误,偶然发现右键选个什么,配置下启动文件就ok了(就是链接到安装目录里面那个可以启动的exe),后来怎么复现不了,伤感了,不过是可以用了,还 ...

  2. Visual Studio 2015简体中文企业版/专业版下载+有效激活密钥

    Visual Studio 2015是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具.代码管控工具.集成开发环境(IDE)等等.所写的目标代码适用于微软支持的所有 ...

  3. Python Locust性能测试框架实践

    [本文出自天外归云的博客园] Locust的介绍 Locust是一个python的性能测试工具,你可以通过写python脚本的方式来对web接口进行负载测试. Locust的安装 首先你要安装pyth ...

  4. winform在不同电脑分辨率

    private void InitializeComponent() { //设定按字体来缩放控件 this.AutoScaleMode = System.Windows.Forms.AutoScal ...

  5. 皇后(queen)

    皇后(queen)[题目描述] 众所不知,rly现在不会玩国际象棋.但是,作为一个OIer,rly当然做过八皇后问题.这里再啰嗦几句,皇后可以攻击到同行同列同对角线,在n*n的方格中摆n个皇后使其互不 ...

  6. iOS及Mac开源项目和学习资料【超级全面】

    UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITable ...

  7. Android监听应用程序安装和卸载

    Android监听应用程序安装和卸载 第一. 新建监听类:BootReceiver继承BroadcastReceiver package com.rongfzh.yc; import android. ...

  8. 我的android学习经历39

    关于像第一次进qq一样的那个渐变企鹅图的制作 渐变动画 package com.moonweather.app.activity; import com.moonweather.app.R; impo ...

  9. 16s及宏基因组测序公司资源--20161104

    锐羿基因: http://www.realbio.cn/index.php?c=list&cs=keyandongtai& 科研动态更新及时 青岛过程能源所: http://www.c ...

  10. vi/vim基本使用方法

    vi/vim 基本使用方法本文介绍了vi (vim)的基本使用方法,但对于普通用户来说基本上够了!i/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅兼容vi的所 ...