JAVA单例设计模式总结及举例

JAVA单例设计模式总结及举例

设计模式:前人总结出来的经验,被后人直接拿来使用.
单例设计模式
一个类只允许有一个对象,将这个对象作为一个全局的访问点,提供出去供大家使用.

 分析:      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
  }
}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值