《Java中的单例模式--两种》
//单例模式:饿汉式和懒汉式
//单例模式 /*
设计模式:解决某一类问题行之有效的解决办法(思想)。
单例(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中的单例模式--两种》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- UCenter整合登陆时出现’Authorization has expired’错误(2014-03-13记)
原因之可能是两台机子的时间不一致导致.
- Oracle分组排序查询
用sql查询每个分组中amount最大的前两条记录: SELECT *FROM HW trWHERE(SELECT COUNT(*) FROM HW WHERE tr.DEPID=DEPID AND ...
- netbeans中给jpanl添加背景图片制定代码的理解——匿名内部类继承父类
此测试是为了仿照在netbeans中给jpanl添加背景图片的制定代码的执行过程 在JpDemo中定义了个Car类的数据类型,但在给其赋值对象时使用了匿名内部类,继承了Car类,是其子类,并重写了父类 ...
- 模块(序列化(json&pickle)+XML+requests)
一.序列化模块 Python中用于序列化的两个模块: json 跨平台跨语言的数据传输格式,用于[字符串]和 [python基本数据类型] 间进行转换 pickle python内置的数据 ...
- 浅谈文本溢出省略号代表修剪text-overflow
一.示例 图片显示: HTML结构: CSS样式: 注意: CSS3 text-overflow 属性规定当文本溢出包含元素时发生的事情,其中 所有浏览器都支持 white-space 属性. 示例 ...
- MyBatis简介
- OSG开发概览
1 OSG基础知识 Ø OSG是Open Scene Graphic 的缩写,OSG于1997年诞生于以为滑翔机爱好者之手,Don burns 为了对滑翔机的飞行进行模拟,对openGL的库进行了封 ...
- java高薪之路__009_网络
1. InetAddress类2. Socket: IP地址和端口号的结合,socket允许程序把网络连接当成一个流,数据在两个socket间通过IO传输, 通信的两端都要有socket. 主动发起通 ...
- STM32学习笔记(十) CAN通讯测试(环回模式)
1.CAN通讯的理解 想学习CAN通讯,那么要对通讯协议有一定的认知.通讯协议是指通信双方对数据传送控制的一种约定.约定中包括对数据格式,同步方式,传输速度,传送步骤,检纠错方式以及控制字符定义等问题 ...
- AlwaysOn数据同步问题探究
随着AlwaysOn技术的流行,关于AlwayOn的问题也越来越多,某企业搭建有三副本的AlwaysOn一套,现想修改主节点上某张表的某个数据,看看会出现什么后果,如果结果正常,就同步到其他节点上:如 ...