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

    单例模式有一下特点:
      1、单例类只能有一个实例。
      2、单例类必须自己自己创建自己的唯一实例。
      3、单例类必须给所有其他对象提供这一实例。

      单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。正是由于这个特 点,单例对象通常作为程序中的存放配置信息的载体,因为它能保证其他对象读到一致的信息。例如在某个服务器程序中,该服务器的配置信息可能存放在数据库或 文件中,这些配置数据由某个单例对象统一读取,服务进程中的其他对象如果要获取这些配置信息,只需访问该单例对象即可。这种方式极大地简化了在复杂环境 下,尤其是多线程环境下的配置管理,但是随着应用场景的不同,也可能带来一些同步问题。    

      单例模式:
            饿汉式:类一加载就创建对象
            懒汉式:用的时候,采取创建对象


        1.懒加载思想,延迟加载用的时候采取加载
        2.线程安全问题
            a.是否是多线程模式 是
            b.是否有共享数据 是,就一个对象
            c.是否有多条语句操作共享数据 是在判断对象是否为null是是就创建对象使用在if语句,在该语句执行处有可能被其他线程直接抢到。
    //-------------------------------------------------代码分割线

     1 public class Teacher {
     2     // 构造私有不能创建对象
     3     private Teacher() {
     4 
     5     }
     6 
     7     // 类一加载不再直接创建对象,而是先赋值为null
     8     private static Teacher t = null;
     9 
    10     // 通过方法创建对象
    11     public synchronized static Teacher getTeacher() {
    12         // 假设有三条线程,t1,t2,t3要执行此处的代码块,
    13         if (t == null) {
    14             // 首先t1抢到线程,创建一个对象,此时t2抢到进来后也会创建一个对象,然后t3又抢到了t3也创建了一个对象,单个对象肯定是不符合要求的
    15             // 为了保证创建一次对象后就不在创建对象,对象在创建的时候其它线程是进不来的,,,将方法同步~
    16             t = new Teacher();
    17         }
    18         return t;
    19     }
    20 }

    //下面的类是测试,

    1 public class TeacherDemo {
    2     public static void main(String[] args) {
    3         Teacher t1 = Teacher.getTeacher();
    4         Teacher t2 = Teacher.getTeacher();
    5         System.out.println(t1 == t2); //true,说明是同一个对象
    6         
    7     }
    8 }

    //=====================================//

    //下面的是单利饿汉式

     1 public class Student {
     2     // 构造私有
     3     private Student() {
     4     }
     5 
     6     // 自己造一个
     7     // 静态方法只能访问静态成员变量,加静态
     8     // 为了不让外界直接访问修改这个值,加private
     9     private static Student s = new Student();
    10 
    11     // 提供公共的访问方式
    12     // 为了保证外界能够直接使用该方法,加静态
    13     public static Student getStudent() {
    14         return s;
    15     }
    16 }
     1 /*
     2  * 单例模式:类在内存中只有一个对象
     3  * 如何保证呢?
     4  *             1.构造方法私有
     5  *             2.在成员位置自己创建一个对象
     6  *             3.通过一个公共的方法提供访问
     7  *    在jdk中有一个类Runtime,就是采用单例模式的饿汉式写的。
     8  */
     9 public class StudentDemo {
    10     public static void main(String[] args) {
    11         // 获得对象
    12         // Student s1 = new Student().getStudent();
    13         // Student s2 = new Student().getStudent();
    14         Student s1 = Student.getStudent();
    15         Student s2 = Student.getStudent();
    16         System.out.println(s1 == s2);
    17         System.out.println(s1);
    18         System.out.println(s2);
    19     }
    20 }

    //===========================//

    // Runtime的简单介绍

     1 import java.io.IOException;
     2 
     3 /*
     4  * Runtime类封装了运行时的环境。
     5  * 每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。
     6  * 一般不能实例化一个Runtime对象,应用程序也不能创建自己的 Runtime 类实例,
     7  * 但可以通过 getRuntime 方法获取当前Runtime运行时对象的引用。 
     8  * 一旦得到了一个当前的Runtime对象的引用,就可以调用Runtime对象的方法去控制Java虚拟机的状态和行为。 
     9  * 常见的应用有
    10  *     1:执行外部程序(调用外部命令)
    11  *     2:内存管理
    12  */
    13 
    14 /**
    15  * 该类的设计模式是饿汉式 
    16  * 每个 Java 应用程序都有一个 Runtime 类实例, 使应用程序能够与其运行的环境相连接。
    17  * 可以通过 getRuntime方法获取当前运行时。
    18  */
    19 public class RuntimerDemo {
    20     public static void main(String[] args) throws IOException {
    21         Runtime r = Runtime.getRuntime();
    22         //r.exec("winmine");
    23         //调用DOS命令执行一些操作。
    24         r.exec("notepad");  //直接在控制台打开记事本
    25         r.exec("shutdown");  //定时关机
    26         
    27     }
    28 }
  • 相关阅读:
    PAT 1006 Sign In and Sign Out
    PAT 1004. Counting Leaves
    JavaEE开发环境安装
    NoSql数据库探讨
    maven的配置
    VMWARE 下使用 32位 Ubuntu Linux ,不能给它分配超过3.5G 内存?
    XCODE 4.3 WITH NO GCC?
    在苹果虚拟机上跑 ROR —— Ruby on Rails On Vmware OSX 10.7.3
    推荐一首让人疯狂的好歌《Pumped Up Kicks》。好吧,顺便测下博客园可以写点无关技术的帖子吗?
    RUBY元编程学习之”编写你的第一种领域专属语言“
  • 原文地址:https://www.cnblogs.com/fuck1/p/5432891.html
Copyright © 2011-2022 走看看