1. 说明

1)单例模式:确保一个类只有一个实例,自行实例化并向系统提供这个实例

2)单例模式分类:饿单例模式(类加载时实例化一个对象给自己的引用),懒单例模式(调用取得实例的方法如getInstance时才会实例化对象)(java中饿单例模式性能优于懒单例模式,c++中一般使用懒单例模式)

3)单例模式要素:

a)私有构造方法

b)私有静态引用指向自己实例

c)以自己实例为返回值的公有静态方法

2.实例

饿单例模式:

复制代码 代码如下:

package com.wish.modedesign;

public class HungrySingleton {

private static HungrySingleton instance  = new HungrySingleton();

private HungrySingleton(){

}

public static HungrySingleton getInstance(){

return instance;

}

}

懒单例模式:

复制代码 代码如下:

package com.wish.modedesign;

public class Singleton {

private Singleton(){

}

private static Singleton instance;

public static synchronized Singleton getInstance(){   //多线程时注意线程安全

if(instance == null){

instance = new Singleton();

}

return instance;

}

}

测试类Driver.java

复制代码 代码如下:

package com.wish.modedesign;

public class Driver {

public static void main(String[] args) {

Singleton s1 = Singleton.getInstance();

Singleton s2 = Singleton.getInstance();

System.out.println(s1==s2);   //true

}

}

3.优点和适用场景

1)单例模式的优点:

在内存中只有一个对象,节省内存空间。

避免频繁的创建销毁对象,可以提高性能。

避免对共享资源的多重占用。

可以全局访问。

2)适用场景:

需要频繁实例化然后销毁的对象。

创建对象时耗时过多或者耗资源过多,但又经常用到的对象。

有状态的工具类对象。

频繁访问数据库或文件的对象。

4.使用时注意事项

1)使用时不能用反射模式创建单例,否则会实例化一个新的对象

2)使用懒单例模式时注意线程安全问题

3)饿单例模式和懒单例模式构造方法都是私有的,因而是不能被继承的,有些单例模式可以被继承(如登记式模式)

java单例模式调用_java单例模式使用及注意事项相关推荐

  1. java并发调用_Java并发教程–可调用,将来

    java并发调用 从Java的第一个发行版开始,Java的美丽之处之一就是我们可以轻松编写多线程程序并将异步处理引入我们的设计中. Thread类和Runnable接口与Java的内存管理模型结合在一 ...

  2. java 单例模式 参数_Java单例模式

    再孬再好,就你一个 单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个 ...

  3. java伪代码生成器_JAVA单例模式的实现伪代码

    什么是单例?:其定义是单例对象的类只能允许一个实例存在 单例的实现基本原理:1.将该类的构造方法定义为私有访问,不对外暴露从而使其他类不能实例化该类对象,只能通过该类的静态方法得到该类的唯一实例 2. ...

  4. 另一个.java文件调用_java - 如何调用另一个类“写文件”的方法? - SO中文参考 - www.soinside.com...

    在我的Android应用程序,我想有一类处理所有"写入/读取到文本文件"的行动.所以,我根本就调用我的readUserFile.java文件我想的方法.但我的方法将不会在该文件中工 ...

  5. net java互相调用_Java与.NET的WebServices相互调用

    本文包括两个部分,***部分介绍了如何用.NET做客户端调用Java写的Web Services,第二部分介绍了如何用Java做客户端调用.NET开发的Web Services. 项目需要的工具 ◆W ...

  6. java ocx调用_Java调用ocx控件以及dll

    下载jacob包 这个包中有jacob-1.17-M2-x64.dll和jacob-1.17-M2-x86.dll两个dll和jacob.jar一个jar包,两个dll一个是64位一个是32位,这个对 ...

  7. java 反射调用_java反射调用方法

    使用參数 args 在 obj 上指派该对象所表示方法的结果 3:hello world!级别的反射调用: package com.dao.Text; import java.lang.reflect ...

  8. java接口调用_java 接口怎么调用

    一个类实现了某一个接口就可以调用接口中的方法.接口可以理解为一种能力,例如:每种动物都有叫的能力,但是每种动物的叫声都不一样,叫的能力就可以定义为一个接口. 一.创建项目和包 打开Eclipse,依次 ...

  9. java rest 调用_Java调用Restful之RestTemplate

    1.spring-mvc.xml中增加RestTemplate的配置 2.引入相关jar包 httpclient-4.3.3.jar.httpcore-4.3.2.jar,jar包版本根据需求自行调整 ...

  10. java 内部类调用_Java内部类使用总结

    1.定义 内部类是指在一个外部类的内部再定义一个类. 内部类作为外部类的一个成员,并且依附于外部类而存在的. 内部类可为static,可用public.protected.private修饰.(而外部 ...

最新文章

  1. system函数和fork-exec机制
  2. 爱奇艺体验Serverless极致扩缩容,资源利用率提升40%
  3. MFC程序执行过程剖析
  4. Spring面试之不同版本AOP执行顺序详解
  5. SpringBoot 启动失败 Failed to determine a suitable driver class 问题解决方案
  6. Cesium:结合天地图实现中文定位
  7. iOS-解决UITableView有footerView时最后一个cell不显示分割线问题
  8. 推荐自用黑苹果Clover引导主题
  9. 嵌入式开发——常见的存储器分类和特性介绍
  10. WOW装备大全(07.11.30)
  11. nginx 下配置禅道
  12. DHCP中继 ||| 四种通信方式(单播+组播+广播+任播)
  13. DNS劫持是什么意思?DNS被劫持怎么办?dns被劫持了怎么处理
  14. html鼠标经过图片放大
  15. 单相逆变器的建模与仿真
  16. Daily Growing 的歌词
  17. 关于通过前端xslx解析excel日期格式数据转化问题以及自定义时间格式YYYY-MM-DD转化
  18. @Autowired的用法和作用
  19. MySQL子查询(嵌套查询)
  20. echarts 地图 区域合并

热门文章

  1. 一款不错的图片自动向上翻滚的代码
  2. 学习笔记14--车联网辅助定位技术
  3. 800*480bmp图片显示
  4. xml文件的概述与应用场景
  5. 如何通过站群提高网站曝光率
  6. 天刀各大服务器位置,天涯明月刀ol第十次合区详解 天刀ol第十次合区结果一览...
  7. linux 搜狗输入法包名,搜狗输入法
  8. 为什么密度泛函理论 (DFT) 会低估带隙?
  9. [转] React之Immutable学习记录
  10. selenium+numpy+opencv突破滑块验证码实现QQ空间登入