//单例模式:饿汉式和懒汉式
//单例模式 /*
设计模式:解决某一类问题行之有效的解决办法(思想)。
单例(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. 重置样式 - Eric Meyer的原版

    重置样式就是一组CSS声明,用来覆盖不同浏览器渲染HTML元素时的各种默认样式.重置样式一般会被加入到主样式文件的开头,用来将各个浏览器的自有默认样式重置成统一表现,确保样式表中后续追加的样式在不同浏 ...

  2. [已解决] windows 80端口被占用

    看下是不是IIS开着,如果是关掉就OK拉 原文地址:http://www.cnblogs.com/gifisan/p/5822156.html

  3. flexigrid随手记

    最近要用到flexigrid做表格,随手记一些知识点. 引入了两个jquery库(jquery.js和jquery-1.7.1.min.js),发生冲突,只保留一个 $("#gridTabl ...

  4. dom4j-1.6.1.jar与dom4j-1.4.jar

    今天在上线的项目中遇到一个很奇怪的问题 File file = new File("O:/20160817/91a2cb1c-62eb-4a31-a1f6-3af8ab71782a/adi6 ...

  5. 查看oracle被锁的表

    SELECT /*+ rule*/ a.sid, b.owner, object_name, object_type FROM v$lock a, all_objects b WHERE TYPE = ...

  6. android 蓝牙串口通讯使用简介

    需要的权限 <uses-permission android:name="android.permission.BLUETOOTH" />  <uses-perm ...

  7. 创建一个叫做People的类: 属性:姓名、年龄、性别、身高 行为:说话、计算加法、改名 编写能为所有属性赋值的构造方法; (2)创建主类: 创建一个对象:名叫“张三”,性别“男”,年龄18岁,身高1.80; 让该对象调用成员方法: 说出“你好!” 计算23+45的值 将名字改为“李四”

    package com.chuoji; public class People { private String name; private int age; private String sex; ...

  8. SharePoint 2013 一些小技巧

    一.添加“SharePoint 2013 切换用户”标签 相比SharePoint 2010,SharePoint2013版本去掉了切换用户登陆的功能(如下图),其实这个可以通过改welcome.as ...

  9. WebRequest使用

    // 待请求的地址 string url = "http://www.cnblogs.com"; // 创建 WebRequest 对象,WebRequest 是抽象类,定义了请求 ...

  10. 制作圆角:《CSS3 Border-radius》

    今天我们在一起来看看CSS3中制作圆角的属性border-radius的具体用法.如今CSS3中的border-radius出现后,让我们没有那么多的烦恼了,首先制作圆角图片的时间是省了,而且其还有多 ...