单例模式:保证类在内存中只有一个对象。

如何保证类在内存中只有一个对象呢?
   A:把构造方法私有
   B:在成员位置自己创建一个对象
   C:通过一个公共的方法提供访问

单例模式之饿汉式:  (一进来就造对象,一回家就吃饭,饿。。)

 public class Student {
// A:把构造方法私有
private Student() {
}
  
// 在成员位置自己创建一个对象
// 静态方法只能访问静态成员变量,加静态
// 为了不让外界直接访问修改这个值,加private
private static Student s = new Student(); // C:通过一个公共的方法提供访问
// 为了保证外界能够直接使用该方法,加静态
public static Student getStudent() {
return s;
}
}

测试类:

 public class StudentDemo {
public static void main(String[] args) {
//按照平常来创建2个对象试试
// Student s1 = new Student();
// Student s2 = new Student();
// System.out.println(s1 == s2); // false,地址值不一样,证明是2个不同的对象 //下面是直接更改了对象s的值,要避免这样的情况,所以在Student类中给对象加私有private
//Student.s = null; // 通过单例如何得到对象呢?
Student s1 = Student.getStudent();
Student s2 = Student.getStudent();
System.out.println(s1 == s2); System.out.println(s1); // null,cn.itcast_03.Student@175078b
System.out.println(s2);// null,cn.itcast_03.Student@175078b
}
}

单例模式之懒汉式:(用的时候才创建对象,不饿不吃)

 public class Teacher {
private Teacher() {
}
//先不创建对象,就是没new
private static Teacher t = null; public synchronized static Teacher getTeacher() {
// 为了防止出现线程安全问题,这里使用同步机制:synchronized
//使用的时候,进行判断
if (t == null) {
//如果是第一次使用,就创建对象
t = new Teacher();
}
//不是第一次,就返回之前创建的对象
return t;
}
}

测试类:

 public class TeacherDemo {
public static void main(String[] args) {
Teacher t1 = Teacher.getTeacher();//t1进去Teacher中是null,创建对象
Teacher t2 = Teacher.getTeacher();//t2进去不是null,用的t1创建的对象
System.out.println(t1 == t2);
System.out.println(t1); // cn.itcast_03.Teacher@175078b
System.out.println(t2);// cn.itcast_03.Teacher@175078b
}
}

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

面试题:单例模式的思想是什么?请写一个代码体现。
   开发:饿汉式(是不会出问题的单例模式)
   面试:懒汉式(可能会出问题的单例模式)
       A:懒加载(延迟加载)
         B:线程安全问题
          a:是否多线程环境 多线程环境下是
          b:是否有共享数据 是,对象t就被共享了
          c:是否有多条语句操作共享数据 是,t1、t2就在共同操作t

还有看这个文章,转载:

JAVA设计模式之单例模式

java 23 - 2 设计模式之单例模式的更多相关文章

  1. java 23种设计模式及具体例子 收藏有时间慢慢看

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代 码可靠性. 毫无疑问,设计模式 ...

  2. java 23 种设计模式

    一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接 ...

  3. (转)java 23种设计模式

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  4. java 23种设计模式,一般情况下,常用的有哪些? 转载

    原址:http://wangle.iteye.com/blog/196972 工厂模式, 工厂方法模式,单例模式, 外观(Facade)模式, 观察者(Observer)模式,桥接(Bridge)模式 ...

  5. Java 23种设计模式

    转自: http://zz563143188.iteye.com/blog/1847029 ; i<count; i++){ list.add(new MailSender()); } } pu ...

  6. java 23种设计模式学习。

    一.3大类设计模式:创建型,结构型,行为型. a.5种创建型模式:工厂方法,抽象工厂,单例,建造者,原型. b.7种结构型模式:适配器,装饰器,代理,外观,桥接,组合,享元. c.11种行为型模式:策 ...

  7. java 23种设计模式 深入浅出

    以下内容只作为对自己对知识进行总结,如有引用他人文章会在文段末尾表明出处: Java的23种设计模式 23种设计模式总共可以分为三大类,进行不定期更新总结,将逐步展开介绍自己对设计模式的理解,多多指教 ...

  8. Java 23 种设计模式的分类和功能

    设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路.它不是语法规定,而是一套用来提高代码可复用性.可维护性.可读性.稳健性以及安全性的解决方案. 设计模式 ...

  9. java基础之----23种设计模式(单例模式)

    概述 提到单例模式,我们并不陌生,而且面试中也常常会问单例模式相关的问题,接下来就谈谈单例模式,这篇文章会回答如下几个问题: 什么是单例模式? 单例模式有几种实现方式,以及各种实现方式的优劣? 单例模 ...

随机推荐

  1. 使用Aircrack-ng进行无线安全审计

    设置监听模式 激活网卡 ifconfig wlan0 up 结束占用网络接口的进程 airmon-ng check kill 开启监听模式 airmon-ng start wlan0 查看网卡是否成功 ...

  2. Nessus常见问题整理

    个别问题感谢大学霸__IT达人在Kali中文网的解答. 问题1: Kali自带Nessus产品注册失败 报Error(500):Activation failed  出现这个错误原因很多.其中有一个原 ...

  3. JavaScript学习13 JavaScript中的继承

    JavaScript学习13 JavaScript中的继承 继承第一种方式:对象冒充 <script type="text/javascript"> //继承第一种方式 ...

  4. iOS coreData问题

    iOS常见错误-CoreData: Cannot load NSManagedObjectModel.nil is an illegal URL parameter
这是因为在工程中CoreData的 ...

  5. iOS 被拒问题及原因 - IDFA问题

    IDFA问题 iOS APP上线被拒绝的问题解决(AdSupport),百度统计,友盟统计,讯飞语音等   苹果反馈信息如下: .... To process your delivery, the f ...

  6. 从Eclipse迁移到Android Studio

    Google正式推出了Android Studio 1.0,Android默认的开发工具也由Eclipse变成了intellij,对Eclipse的支持肯定会越来越少了,对于Android开发者来说, ...

  7. JAVA IO 序列化与设计模式

    ➠更多技术干货请戳:听云博客 序列化 什么是序列化 序列化:保存对象的状态 反序列化:读取保存对象的状态 序列化和序列化是Java提供的一种保存恢复对象状态的机制 序列化有什么用 将数据保存到文件或数 ...

  8. OC字符串NSString

    ========================== 面向对象编程进阶和字符串 ========================== Δ一.类的设计模式—单例 [单例]程序允许过程中,有且仅有一块内存 ...

  9. IOS中十六进制的颜色转换为UIColor

    IOS中十六进制的颜色转换为UIColor #pragma mark - 颜色转换 IOS中十六进制的颜色转换为UIColor + (UIColor *) colorWithHexString: (N ...

  10. 学习 java命令

    依稀记得自己第一次编译*.java文件,第一次运行*.class文件.但是六七年过去了,现在运行java写的程序更多的是用tomcat这种web容器.最近有个小需求,写一个监控zookeeper集群的 ...