* 设计模式:前人总结出来的经验,被后人直接拿来使用.
* 单例设计模式:一个类只允许有一个对象,将这个对象作为一个全局的访问点,提供出去供大家使用.
* 分析:
*     1.用户只能有一个对象
*     2.全局的访问点:得到的对象就是全局的访问点. 如何做到全局?让static去修饰
*     3.如何提供出去?
*     4.供大家使用?--单例的功能
* 单例类的作用:
*   1.可以实现两个对象之间的传值
*   2.可以在全局范围内调用很多的功能.
* 好处:可以让两个对象在完全没有关系的前提下,实现值的传递,降低了耦合性,提高了内聚性
*   (耦合性,内聚性在微观上说:描述的是类与类之间的关系。好处:我们应该尽量提高内聚性,减少耦合性,可以提高程序的健壮性,增加代码的可移植性,方便实现模块儿化编程
*    如何做到低耦合高内聚? 在处理类与类关系的时候,让类之间的关系越紧密耦合性越高,内聚性越低.反之,关系越松散耦合性越低,内聚性越高.)
*/

分类:饿汉式、懒汉式:格式都差不多,懒汉式有一个判断,但是两者的大体框架都这样,实在不理解可以背下来以后会明白的。
1、饿汉式-在定义变量的同时完成初始化

class SingleInstance{//创建单例类
  //2.在类的内部创建一个当前类型的属性并赋值--在类的内部得到了当前类的一个对象
  //将变量私有化,让外界无法直接访问 给变量用static修饰让他成为全局的访问点
   private static SingleInstance singleInstance = new SingleInstance();
  //1.将构造方法私有化
   private SingleInstance() {
  }
  //3.使用公共的方法将变量提出出去,并将方法设置成静态的
  public static SingleInstance getInstance(){
    return singleInstance;
  }
}
2、懒汉式-开始只是定义变量,什么时候使用什么时候赋值
class SingleInstance1{
   private static SingleInstance1 singleInstance = null;//先不赋值
  private SingleInstance1() {
  }
  public static SingleInstance1 getInstance(){
    if (singleInstance == null) {                   //判断是否为空
    singleInstance = new SingleInstance1();//用的时候再赋值
    }
    return singleInstance;
  }

  int num;//这个num供之后的举例使用
}

//主函数:
public class Demo5 {
  public static void main(String[] args) {
  SingleInstance1 s1 = SingleInstance1.getInstance();
  SingleInstance1 s2 = SingleInstance1.getInstance();
  System.out.println(s1 == s2);//运行后输出true,说明获取到的是同一个对象
//实例:
//功能:将A类中num1的值传给B类对象的num2
  A a = new A();
  a .num1 = 4;
  B b = new B();
//  b.num2 = a.num1;       方法一:直接赋值,一般类的成员变量是私有的,所以不推荐
//  b.test(a);      方法二:通过传参间接赋值
// 方法三:通过单例实现传值 :
  a.ceshi1();
  b.ceshi2();
  }
}
//测试单例的功能
class A{
  int num1;
//测试通过单例传值
  public void ceshi1() {
    SingleInstance1 s1 = SingleInstance1.getInstance();
    s1.num = num1; //把num1传给num
  }
}
class B{
  int num2;
//通过传参赋值
  public void test(A a){
    num2 = a.num1;
  }
//测试通过单例传值
  public void ceshi2(){
    SingleInstance1 s2 = SingleInstance1.getInstance();
    num2 = s2.num;//把num传给num2
  }
}

文章原创,转载请注明出处谢谢

java单例设计模式总结及举例的更多相关文章

  1. Java单例设计模式的实现

    1. 单例设计模式的定义 单例设计模式确保类只有一个实例对象,类本身负责创建自己的对象并向整个系统提供这个实例.在访问这个对象的时候,访问者可以直接获取到这个唯一对象而不必由访问者进行实例化. 单例设 ...

  2. Java——单例设计模式

    设计模式:解决某一类问题最行之有效的方法.Java中23种设计模式:单例设计模式:解决一个类在内存中只存在一个对象. 想要保证对象唯一.1,为了避免其他程序过多建立该类对象.先禁止其他程序建立该类对象 ...

  3. 转:java单例设计模式

    本文转自:http://www.cnblogs.com/yinxiaoqiexuxing/p/5605338.html 单例设计模式 Singleton是一种创建型模式,指某个类采用Singleton ...

  4. Java单例设计模式和多例设计模式

    单例设计模型 教学视频链接:https://edu.aliyun.com/course/1011 1,private不可以在类外部访问,但可以在内部访问 2,此时Singleton类内部的instan ...

  5. java 单例设计模式

    1.饿汉单例设计模式:  步骤 :   1.定义一个私有的静态成员变量来引用对象(私有的静态对象),设置对象唯一.   2.私有化构造方法,防止new对象.   3.创建一个公开的静态方法,返回上面的 ...

  6. 对Java单例设计模式中懒汉式类定义的讨论

    全世界人民都知道单例设计模式中类的定义分为懒汉式和饿汉式两种,然而今天并不是要把它们做横向比较.实际上,不论饿汉式类的代码看起来有多么美轮美奂,在实际开发中它的效率总是不如懒汉式的.然而在笔试和面试中 ...

  7. Java单例设计模式(实现Java的一个类只有一个对象)

    单例设计模式的定义:单例设计模式是一种软件设计模式,在它的核心包含一个称为单例类的核心类. 核心便是希望一个类只有一个对象.  如何实现类在内存中只有一个对象呢? 第一步:构造私有:第二步:本身提供一 ...

  8. java—单例设计模式

    单例设计模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 1.构造方法私有化 2.声明一个本类对象 3.给外部提供一个静态方法获取对象实例 什么时候使用? 1.通过在工具类的设计中使用: ...

  9. Java 单例设计模式之 饿汉式和懒汉式

    public class InstanceSampleTest { public static void main(String[] args) { /** 单例设计模式的 饿汉式和懒汉式 * 单例模 ...

随机推荐

  1. day13笔记

    1:StringBuffer(掌握) (1)用字符串做拼接,比较耗时并且也耗内存,而这种拼接操作又是比较常见的,为了解决这个问题,Java就提供了 一个字符串缓冲区类.StringBuffer供我们使 ...

  2. 类 Arrays StringBuilder 跟 StringBuffer 的异同 SimpleDateFormat

    类 String 同:起连接字符串类型作用 异: StringBuffer    //线程安全  效率慢 StringBuilder   //线程不安全  效率快 类 Arrays copyOf  ( ...

  3. kali linux 配置嵌入式开发环境

    kali linux 2018.2 x64 一.支持i386库 如果你是64位的Kali Linux系统,用如下命令添加i386架构支持到你的开发环境. dpkg --add-architecture ...

  4. shell脚本学习总结(不断更新中)

    前言:自从大学毕业参加工作以来,接触的开发工作都是在服务端完成,于是接触了比较多的Linux当做开发机使用,或多或少有一些重复性的工作,于是开始琢磨学习一些shell脚本的知识,以便处理这些繁琐的事情 ...

  5. seckill(1)秒杀系统主要步骤

  6. c#线程池ThreadPool实例详解

    1. 如何查看线程池的最大线程数和最小线程数 static void Main(string[] args) { Console.WriteLine("----------线程池开始,线程I ...

  7. Centos6.5 安装 RabbitMQ 3.7.11

    RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python.Ruby..NET.Java.JMS.C.PHP.ActionScript.XMPP.STO ...

  8. 2017-9-3模拟赛T3 密码(key)

    题目 题解 这题用类似暴力+优化(划掉)的思想. 对于每个轨迹串,求出每一位向后的第一个0-9间某个数字的位置(如123112中3后面第1个2的位置为从左往右数第6个),复杂度O(Σn)=O(L). ...

  9. SpringCloud 教程

    参考http://blog.csdn.net/forezp/article/details/70148833 出自方志朋的博客

  10. ZT 将sublime text的tab改为四个空格

    打开Sublime Text3,选择菜单Preferences->Settings-User,打开用户配置文件(据本人理解,Settings-Default是不允许用户自己修改的~而Settin ...