zoukankan      html  css  js  c++  java
  • 设计模式之单例设计模式

    设计模式:
    就是为了代码重用性高,可靠性性高,通过无数有经验的程序员总结出来的一套模块化的东西
    大家要实现某个目的,就可以使用这个设计模式
    1.单例设计模式:
    保证类在内存中只有一个对象
    实现方法,先介绍两种,然后分析补充

    1.1饿汉式

    1 public class Singleton {
    2     //饿汉式,先创建对象
    3     private Singleton(){
    4     }
    5     private static Singleton s = new Singleton();
    6     public static Singleton getInstance(){
    7         return s;
    8     }
    9 }

    1.2懒汉式

     1 public class Singleton {
     2     //懒汉式,用的时候再创建对象
     3     private Singleton(){
     4     }
     5     private static Singleton s = null;
     6     public static Singleton getInstance(){
     7         if (s == null) {
     8             s = new Singleton();
     9         }
    10         return s;
    11     }
    12 }
    1 public class Test {
    2     public static void main(String[] args) {
    3         Singleton s1 = Singleton.getInstance();
    4         Singleton s2 = Singleton.getInstance();
    5         System.out.println(s1 == s2);
    6     }
    7 }

    保证内存中只存在一个对象

    首先私有化构造方法,这样在其它类中就不能创建该类的对象了,只能在本类中创建

    然后实例化一个对象,对外提供公共的访问方法,必须都用static修饰

    因为static,就是静态,在类加载的时候就加载的,就是说在1.1中类加载完就存在了一个对象

    公共访问方法加static,主要是为了采用类名.的方式调用

    第一种,做不到对象的延迟加载,可能会出现很多对象创建了而没有用的现象,浪费存储空间

    第二种,存在多线程的问题,在多线程的情况下,可能内存中会出现多个对象,所以这种方式不采用

    当线程1判断if (s == null) 成立的时候,切换到线程2,在创建对象,然后再切换到线程1,此时内存中已经有对象了,然而线程1还是会创建对象

    所以这种情况就有问题,所以要使用加锁处理,如下

    1.3加锁处理

     1 public class Singleton {
     2     private Singleton() {}
     3     private static Singleton s = null;
     4     // 双重检查
     5     public static Singleton getInstance() {
     6         if (s == null) {
     7             synchronized (Singleton.class) {
     8                 if (s == null) {
     9                     s = new Singleton();
    10                 }
    11             }
    12         }
    13         return s;
    14     }
    15 }

    这样就解决了线程安全的问题,同时在内存中也不会出现一些没有用的对象,兼顾安全与性能......

  • 相关阅读:
    【面试必备】CSS盒模型的点点滴滴
    2013年终总结——求评点求指导
    【面试必备】javascript的原型和继承
    支持断点续传的文件上传插件——Huploadify-V2.0来了
    【面试必备】javascript操作DOM元素
    走进AngularJs(八) ng的路由机制
    走进AngularJs(七) 过滤器(filter)
    走进AngularJs(六) 服务
    HTML5+flash打造兼容各浏览器的文件上传方案
    免费的HTML5版uploadify送上
  • 原文地址:https://www.cnblogs.com/jaro/p/8975086.html
Copyright © 2011-2022 走看看