之前接触过单例模式,当初不明白这样的设计用意,今天特地研究了下java中的单例设计模式的用处及用法。

单例模式:单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。一个类有且仅有一个实例,并且自行实例化向整个系统提供。

单例模式的用处:一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。如在Windows中就只能打开一个任务管理器。如果不使用机制对窗口对象进行唯一化,将弹出多个窗口,如果这些窗口显示的内容完全一致,则是重复对象,浪费内存资源;如果这些窗口显示的内容不一致,则意味着在某一瞬间系统有多个状态,与实际不符,也会给用户带来误解,不知道哪一个才是真实的状态。因此有时确保系统中某个对象的唯一性即一个类只能有一个实例非常重要。http://baike.baidu.com/view/1859857.htm

例子代码如下:

public class TestSingleMode {

public static void main(String[] args) {
  
                        Singleton s1 = null ;//创建对象s1
                        Singleton s2 = null ;//创建对象s2
                        s1 = Singleton.getInstance() ;//把类中的实例化对象传递给s1
                        s1.print() ; //调用print方法打印输出
                        s2 = Singleton.getInstance() ;//把类中的实例化对象传递给s2
                        s2.print() ; //调用print方法打印输出
   
                        s2.setName("jack");
                        s2.setAge(2);
   
                        s1.print();
                         }
                }

class Singleton  {//定义Singleton类

//在类的内部用静态实例化对象并私有化
                     private static Singleton instance = new Singleton() ;
                 //用静态方式定义getter方法取回instance对象
                     public static Singleton getInstance(){
                          return instance ;
                     }
                     private String name ; //定义name属性
                     private int age ;  //定义age属性
                     private Singleton(){} //无参构造 并私有化
                     public void setName(String name){ //setter方法
                          this.name = name ;
                     }    
                     public String getName(){ //getter方法
                          return this.name ;
                     }
                     public void setAge(int age){//setter方法
                          this.age = age ;
                     }
                     public int getAge(){ //getter方法
                          return this.age ;
                     }
                     public void print(){ //定义一个打印输出的方法
                          System.out.println("姓名:" + getName() + "年龄:" + getAge()) ;
                     }
                }

运行结果:

姓名:null年龄:0
                    姓名:null年龄:0
                    姓名:jack年龄:2

总结:s1 与 s2 指向同一对象,当修改s2的值时,s1的值也会改变。

转载于:https://blog.51cto.com/kingstar/1531703

笔记:Java中的单例设计模式相关推荐

  1. Java中的单例设计模式

    什么是单例设计模式 所谓单例设计模式,就是采取一定的方法保证整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法. 目的:使用着在main方法中就不可以自己创建实例对象 ...

  2. 单例设计模式java,浅谈Java编程中的单例设计模式

    写软件的时候经常需要用到打印日志功能,可以帮助你调试和定位问题,项目上线后还可以帮助你分析数据.但是Java原生带有的System.out.println()方法却很少在真正的项目开发中使用,甚至像f ...

  3. java实现一个单例设计模式_Java正确实现一个单例设计模式的示例

    Java正确实现一个单例设计模式的示例 发布于 2021-1-12| 复制链接 分享一篇关于关于Java正确实现一个单例设计模式的示例,小妖觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的 ...

  4. Java面试题:单例设计模式、适配器模式的不同方式

    QUESTION:单例设计模式.适配器模式的不同方式? ANSWER: 1.单例设计模式,适配器设计模式     单利设计模式:             在java中,单例模式是指为了保证类在内存中只 ...

  5. 【单例】JAVA中的单例

    单例模式,属于创建类型的一种常用的软件设计模式.通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例. Java中单例模式定义:& ...

  6. JAVA_Lesson8(传智播客笔记之继承、单例设计模式懒汉式、饿汉式)

    数组对象工具的建立(重要的是这种思想) 主函数是静态的,主函数需要调用的也需要static. 当有2个.java文件时,先编译含有函数功能的.java文件,再编译含主函数的.java文件.(因为主函数 ...

  7. 26、Java 简单实现单例设计模式(饿汉式和懒汉式)

    文章目录 一.概念 二.饿汉式 三.懒汉式 一.概念 ✏️[Singleton Pattern]如果一个类被设计成单例设计模式,则在整个应用程序运行过程中,该类只能存在一个实例. 二.饿汉式 思考:如 ...

  8. Java 多线程之单例设计模式

    转载:https://segmentfault.com/a/1190000007504892 概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍两种:懒汉式单例.饿汉 ...

  9. java中的单例_细说Java中的几种单例模式

    在Java中,单例模式分为很多种,本人所了解的单例模式有以下几种,如有不全还请大家留言指点: 饿汉式 懒汉式/Double check(双重检索) 静态内部类 枚举单例 一.饿汉式 image 饿汉式 ...

最新文章

  1. 推荐:一本“高颜值”的R语言数据可视化图书(包邮送3本)
  2. oracle去掉blob的黑边,oracle Blob处理
  3. matlab通信物理层仿真,通信小精灵(物理层仿真工具) 可计算仿真误码率、理论误...
  4. 要强大的“黑匣子”,还是“可解释”的机器学习?| 清华AI Time激辩
  5. Android内核开发必备知识
  6. javascript时间处理
  7. hdu 4725 The Shortest Path in Nya Graph(建图+优先队列dijstra)
  8. ng-template和ngTemplateOutlet
  9. 彭博社:中企游说政府否决英伟达收购Arm
  10. ffmpeg打开音频设备
  11. 【C++】 11_新型的类型转换
  12. java常用设计模式 看了她,改变你的一生~~~
  13. 【蓝桥杯国赛真题06】Scratch3D打印 少儿编程scratch蓝桥杯国赛真题和答案讲解
  14. 数据、运营相关试题(三)【牛客网:数据运营试题广场】
  15. [通信原理]关于QPSK信号包络起伏问题的研究
  16. AppCan西游汇“移动互联网创业者技术沙龙” (重庆站)
  17. linux的htb队列,Linux流量控制中的HTB队列创建与过滤(2)
  18. git head指向老版本_16. branch与HEAD的理解,使用git reset恢复到过去的某个版本
  19. python关于re模块(正则表达式)
  20. 中国第一个Oracle高可用认证大师?

热门文章

  1. Java实现二分查找及其优化
  2. 如何将静态网页通过nginx访问
  3. Matlab | Matlab从入门到放弃(12)——基于Matlab的特征值与奇异值分解
  4. android 测试网,Android Monkey测试
  5. C语言第一行为N以下N行,C语言每日小练(四)——勇者斗恶龙
  6. bitmap xml大小 安卓_一张壁纸让安卓用户手机系统崩溃,包括三星、小米、一加等...
  7. 理解Windows内核模式与用户模式
  8. android 减少布局层级,Android 布局优化
  9. 【深度学习】图片分类CNN模板
  10. 【NLP】竞赛中的文本相似性!