Java设计模式之单例模式
2016-07-02 22:10
183 查看
1.单例设计模式概述
2.单例模式优点
3.单例模式缺点
注意:单例模式的实现由两种情况
1).饿汉式(类一加载就创建对象)
(1)构建单例模式的类
(2)进行测试和分析
2).懒汉式(用的时候,才去创建对象)
(1)构建单例模式的类
(2)进行测试与分析
单例模式就是要确保类在内存中只有一个对象,该实例必须自动创建,并且对外提供。
2.单例模式优点
在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。
3.单例模式缺点
没有抽象层,因此扩展很难。职责过重,在一定程序上违背了单一职责。
注意:单例模式的实现由两种情况
1).饿汉式(类一加载就创建对象)
(1)构建单例模式的类
public class Student { // 构造私有 private Student() { } // 自己造一个 // 静态方法只能访问静态成员变量,加静态 // 为了不让外界直接访问修改这个值,加private private static Student s = new Student(); // 提供公共的访问方式 // 为了保证外界能够直接使用该方法,加静态 public static Student getStudent() { return s; } }
(2)进行测试和分析
/* * 单例模式:保证类在内存中只有一个对象。 * * 如何保证类在内存中只有一个对象呢? * A:把构造方法私有 * B:在成员位置自己创建一个对象 * C:通过一个公共的方法提供访问 */ public class StudentDemo { public static void main(String[] args) { // Student s1 = new Student(); // Student s2 = new Student(); // System.out.println(s1 == s2); // false // 通过单例如何得到对象呢? // 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 } }
2).懒汉式(用的时候,才去创建对象)
(1)构建单例模式的类
/* * * 面试题:单例模式的思想是什么?请写一个代码体现。 * * 开发:饿汉式(是不会出问题的单例模式) * 面试:懒汉式(可能会出问题的单例模式) * A:懒加载(延迟加载) * B:线程安全问题 * a:是否多线程环境 是 * b:是否有共享数据 是 * c:是否有多条语句操作共享数据 是 */ public class Teacher { private Teacher() { } private static Teacher t = null; public synchronized static Teacher getTeacher() { //可能出现线程安全问题所以用synchronizd // t1,t2,t3 if (t == null) { //t1,t2,t3 t = new Teacher(); } return t; } }
(2)进行测试与分析
public class TeacherDemo { public static void main(String[] args) { Teacher t1 = Teacher.getTeacher(); Teacher t2 = Teacher.getTeacher(); System.out.println(t1 == t2); System.out.println(t1); // cn.itcast_03.Teacher@175078b System.out.println(t2);// cn.itcast_03.Teacher@175078b } }
相关文章推荐
- 举例讲解C#编程中对设计模式中的单例模式的运用
- php设计模式之单例模式实例分析
- PHP基于单例模式实现的数据库操作基类
- JavaScript编程的单例设计模讲解
- C#设计模式之单例模式实例讲解
- Javascript实现单例模式
- JS模式之单例模式基本用法
- 深入理解JavaScript系列(25):设计模式之单例模式详解
- 使用设计模式中的单例模式来实现C++的boost库
- Java单例模式、饥饿模式代码实例
- java设计优化之单例模式
- C# 设计模式系列教程-单例模式
- Android源码学习之单例模式应用及优点介绍
- JavaScript实现设计模式中的单例模式的一些技巧总结
- C++设计模式之单例模式
- C#窗口实现单例模式的方法
- Java线程安全中的单例模式
- PHP单例模式详细介绍
- PHP单例模式是什么 php实现单例模式的方法
- PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式