确保一个类只有一个实例,并且只有一个全局访问点。如果使用多个类加载器,可能导致单例模式失效而产生多个实例。单例不允许继承,全局变量也会产生多个实例. 单例模式和工厂模式,抽象工程模式 其实都是为了创建对象,但是单例模式只能产生一个对象实例,而工厂模式可以产生不同类型的对象,抽象工厂模式却能批量产生不同类型的对象。单例模式产生的对象有些孤独,是寡者,没有兄弟,一般对特别重要的资源才可能用到单例模式,这些资源只有一份,就如皇帝,太阳只有一个,皇帝是不希望其他人与他同时也是皇帝的,哪怕是自己的兄弟姐妹。
- synchronized 对线程同步有作用,但是会降低性能。如果对性能要求不高采用此办法
public class SynchronizedSingleton {
private int i=0;
private static SynchronizedSingleton uninstance=null;
private void SynchronizedSingleton() {
}
public static synchronized SynchronizedSingleton getInstance() {
if (uninstance == null)
uninstance= new SynchronizedSingleton();
return uninstance;
}
public void hello(){
System.out.println(++i);
}
}
- 使用"急切"创建实例,而不用延迟实例化的做法。 此法负担不很繁重。此法依赖JVM加载这个类时马上创建唯一单件实例。JVM保证在任何线程访问uniqueInstance静态变量之前,一定先创建此 实例。
public class EagerlySingleton {
private int i=0;
private static EagerlySingleton uniqueInstance=new EagerlySingleton();
private EagerlySingleton(){}
public static EagerlySingleton getInstance(){
return uniqueInstance;
}
public void hello(){
System.out.println(++i);
}
}
- 用“双重检查加锁”,在getInstance中减少使用同步。此方法依赖jdk1.5
public class DoubleCheckedSynchronizedSingleton {
private int i = 0;
private volatile static DoubleCheckedSynchronizedSingleton uninstance = null;
private void SynchronizedSingleton() {
}
public static DoubleCheckedSynchronizedSingleton getInstance() {
if (uninstance == null) {
synchronized (DoubleCheckedSynchronizedSingleton.class) {
if (uninstance == null) {
uninstance = new DoubleCheckedSynchronizedSingleton();
}
}
}
return uninstance;
}
public void hello() {
System.out.println(++i);
}
}
分享到:
相关推荐
创建型设计模式关注的是对象的创建,如工厂方法、抽象工厂、建造者、原型和单例模式,它们分别处理不同程度的对象创建延迟和实例化过程。结构型模式则涉及如何组合类和对象,包括适配器、桥接、组合、装饰器、外观、...
在《JAVA与模式读书笔记》中,我们探讨的是Java编程语言与设计模式的结合应用,这对于深入理解面向对象编程和提升软件开发能力至关重要。设计模式是软件工程中的最佳实践,它们是解决常见问题的模板,可以提高代码的...
1. 创建型模式:如单例模式(Singleton)、工厂模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)和原型模式(Prototype)。这些模式关注对象的创建,旨在降低对象的创建过程与使用...
2. **单例模式**:单例模式确保一个类只有一个实例,并提供全局访问点。这样可以控制资源的使用,比如线程池、缓存或者对话框等。实现时需防止反序列化和反射创建多个实例。 3. **观察者模式**:行为型设计模式,它...
12. **设计模式**:在C++中,了解和应用设计模式(如工厂模式、单例模式、观察者模式等)可以帮助开发者写出高效、可维护的代码。 以上是C++编程的一些核心概念,但实际的读书笔记可能会包含更多细节,如特定的编程...
9. **游戏设计模式**:作为编程的最佳实践,设计模式在游戏开发中扮演重要角色,如单例模式用于管理全局资源,工厂模式用于对象创建,观察者模式用于事件处理等。 10. **性能优化**:Java的垃圾回收机制虽然方便,...
* 可以实现单例模式:静态工厂方法可以实现单例模式,确保只有一个对象实例存在。 * 可以缓存对象:静态工厂方法可以缓存对象,提高程序的性能。 然而,静态工厂方法也存在一些缺点,如不能被继承、不容易被发现等...
下面将详细解读这个领域的核心知识点,并基于"代码质量-读书笔记"的内容展开讨论。 首先,我们要理解什么是代码质量。代码质量不仅仅关乎代码的正确性,更包括其可读性、可维护性、可扩展性等多个方面。良好的代码...
- 设计模式是解决常见编程问题的经验总结,如工厂模式、单例模式、观察者模式等,它们是面向对象设计的精髓。 这篇读书笔记通过孙卫琴老师的视角,对上述知识点进行了详细解读和实例演示,有助于读者深入理解Java...
抽象工厂也可以与桥接模式结合,封装特定关系,或者与单例模式配合,控制对象的唯一实例。 设计模式的学习和应用对于提升软件设计的灵活性、可维护性和可扩展性至关重要。在Python等编程语言中,设计模式的实践有助...
5. 高级设计模式:书中可能涵盖了常见的设计模式,如工厂模式、单例模式、观察者模式等,这些模式在解决特定问题时能提供可复用的解决方案,提高代码质量。 6. 并发和多线程:随着多核处理器的普及,理解和掌握并发...
- Item3:单例模式应使用私有构造子和静态工厂方法实现,确保只有一个实例存在。若需要线程安全,推荐使用枚举类型实现单例,因为枚举是自动线程安全的。 - Item4:如果一个类不应当被实例化,使用私有构造子并...
这份"C++读书笔记"无疑为学习者提供了一条系统性地掌握这门语言的道路。笔记作者凭借多年的实践经验,提炼出了一系列精华要点,旨在帮助读者避开陷阱,掌握高效编程方法。 1. **基础概念**:C++是一种静态类型的、...
- **Go语言设计模式**:如工厂模式、单例模式、装饰器模式等在Go语言中的实现。 - **Go语言性能调优**:如何利用工具分析和优化Go程序的性能。 - **Go语言的最佳实践**:如何编写符合Go语言风格的代码,遵循Go语言的...
这篇读书笔记主要聚焦在第五部分的内容,可能涵盖了类、对象、继承、多态等关键主题。由于没有具体的描述内容,我将根据《Thinking in Java》第五部分的一般性知识点进行阐述。 1. **类与对象**:在Java中,类是...
10. **设计模式**:《Java与模式》这本书很可能介绍了常见的设计模式,如单例模式、工厂模式、观察者模式等,这些都是软件开发中的最佳实践。 11. **Java EE(企业版)**:如果笔记涉及到此部分,可能会讲解Servlet...
### Effective Java读书笔记(上) #### 第一章 引言 本书主要针对Java开发者提供了大量实用的编程指导建议,帮助读者提升代码质量和程序性能。在本章节中,我们将重点介绍对象的创建与销毁,以及一些重要的设计...
### Android艺术开发探索读书笔记(1-3章) #### 概述 《Android艺术开发探索》一书深入探讨了Android应用开发的核心技术和实践方法。本书第1至3章重点介绍了Activity生命周期、启动模式以及Android IPC机制等内容...
23种设计模式是面试中常见的考点,包括单例模式、工厂模式、代理模式、装饰器模式等,理解其应用场景和实现方式。 七、框架与工具 1. **前端框架**:React、Vue、Angular的使用和原理,以及CSS预处理器如Sass、...
书中包含了作者的个人读书笔记,这表明除了正文内容之外,作者还提供了自己的理解与见解,这些笔记可能对理解设计模式的精髓与实际应用有很大的帮助。 在内容部分,我们可以看到有关于设计模式的一些具体讨论,例如...