设计模式--单例模式(简要)(十一)
2017-07-15 14:34
127 查看
单例模式知识点梳理:
1.一个类只能产生一个对象,就是单例模式;
2.饿汉式在类一加载就创建对象;懒汉式在用的时候才去创建;推荐使用饿汉式;
如何保证类在内存中只有一个对象呢?
A:把构造方法私有
B:在成员位置自己创建一个对象
C:通过一个公共的方法提供访问
在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。
缺点
没有抽象层,因此扩展很难。
职责过重,在一定程度上违背了单一职责
懒汉式:用的时候,才去创建对象;
面试题:单例模式的思想是什么?请写一个代码体现
开发:饿汉式(是不会出问题的单例模式)
面试:懒汉式(可能会出问题的单例模式)
A:懒加载(延迟加载)
B:线程安全问题
public class
Student {
//
构造私有
private
Student() {
}
//
静态方法只能访问静态成员变量
//
为了不让外界直接访问修改这个值,加private
private static Student
s =
new Student();
//
提供公共的访问方式
//
为了保证外界能够直接使用该方法,加静态
public static Student
getStudent() {
return
s;
}
}
/*测试类*/
public class
StudentDemo {
public static void
main(String[] args) {
Student
s1 = Student.getStudent();
Student
s2 = Student.getStudent();
System.out.println(s
4000
1
== s2);//true
}
}
public class
Teacher {
private
Teacher() {
}
private static Teacher
t =
null;
publicstatic Teacher
getTeacher() {
if
(t
== null) {
t
= new Teacher();
}
return
t;
}
}
//测试类
public class
TeacherDemo {
public static void
main(String[] args) {
Teacher
t1 = Teacher.getTeacher();
Teacher
t2 = Teacher.getTeacher();
System.out.println(t1
== t2);
}
}
1.一个类只能产生一个对象,就是单例模式;
2.饿汉式在类一加载就创建对象;懒汉式在用的时候才去创建;推荐使用饿汉式;
一.单例设计模式概述
单例模式就是要确保类在内存中只有一个对象,该实例必须自动创建,并且对外提供。如何保证类在内存中只有一个对象呢?
A:把构造方法私有
B:在成员位置自己创建一个对象
C:通过一个公共的方法提供访问
二.优缺点:
优点在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。
缺点
没有抽象层,因此扩展很难。
职责过重,在一定程度上违背了单一职责
三.饿汉式与懒汉式的区别
饿汉式:类一加载就创建对象;懒汉式:用的时候,才去创建对象;
面试题:单例模式的思想是什么?请写一个代码体现
开发:饿汉式(是不会出问题的单例模式)
面试:懒汉式(可能会出问题的单例模式)
A:懒加载(延迟加载)
B:线程安全问题
四.饿汉式示例:
//创建单例类public class
Student {
//
构造私有
private
Student() {
}
//
静态方法只能访问静态成员变量
//
为了不让外界直接访问修改这个值,加private
private static Student
s =
new Student();
//
提供公共的访问方式
//
为了保证外界能够直接使用该方法,加静态
public static Student
getStudent() {
return
s;
}
}
/*测试类*/
public class
StudentDemo {
public static void
main(String[] args) {
Student
s1 = Student.getStudent();
Student
s2 = Student.getStudent();
System.out.println(s
4000
1
== s2);//true
}
}
五.懒汉式示例:
//单例类public class
Teacher {
private
Teacher() {
}
private static Teacher
t =
null;
publicstatic Teacher
getTeacher() {
if
(t
== null) {
t
= new Teacher();
}
return
t;
}
}
//测试类
public class
TeacherDemo {
public static void
main(String[] args) {
Teacher
t1 = Teacher.getTeacher();
Teacher
t2 = Teacher.getTeacher();
System.out.println(t1
== t2);
}
}
相关文章推荐
- 设计模式--单例模式(简要)(十一)
- 设计模式--单例模式(简要)(十一)
- 设计模式--单例模式(简要)(十一)
- 设计模式--单例模式(简要)(十一)
- 设计模式--单例模式(简要)(十一)
- 设计模式--单例模式(简要)(十一)
- 设计模式--单例模式(简要)(十一)
- 设计模式--单例模式(简要)(十一)
- 设计模式--单例模式(简要)(十一)
- 设计模式--单例模式(简要)(十一)
- 设计模式--单例模式(简要)(十一)
- 设计模式--单例模式(简要)(十一)
- 设计模式--单例模式(简要)(十一)
- 设计模式--单例模式(简要)(十一)
- 设计模式--抽象工厂模式(简要)(九)
- 设计模式(十一)代理模式Proxy(结构型)
- 设计模式(十一)桥接模式
- 结合项目实例 回顾传统设计模式(十一)代理模式
- 设计模式--工厂模式(简要)(七)
- 浅谈Java设计模式(十一)组合模式(Composite)