学习了Java两个月。。之后两个月学习jsp,servlet,sql,html一堆杂七杂八的东西。又花一个多月复习了一下。。。
之后一个偶然的机会,跑J道里逛了逛。。banq老大强调oo思想,设计模式。。于是开始学习设计模式 :D
刚开始学。。好多东西都不是那么明白。。。有理解错误的地方还请多多指教。。。
我从Singleton开始学。。我是这么理解的。。
Singleton顾名思义就是只能创建一个实例对象。。所以不能拥有public的构造方法。。
java 代码
- public class Singleton{
- private Singleton(){}
- }
既然构造方法是私有的,那么从外面不可能创建Singleton实例了。。只能从内部创建。。所以需要一个方法来创建此实例。。此方法肯定必须是static的。。
java 代码
- public class Singleton{
- private Singleton(){}
-
- public static Singleton getInstance(){
- return [Singleton Instance];
- }
- }
getInstance方法要返回一个Singleton实例。。就要一个Singleton类型的变量来存储。。声明一个Singleton类型的属性。。同样需要是static 的。。静态方法只能访问静态属性。。。
java 代码
- public class Singleton{
- private Singleton(){}
-
- public static Singleton getInstance(){
- single=new Singleton();
- return single;
- }
- private static Singleton single;
- }
如此就能获得Singleton的实例了。。但是并不能确保只生成一个实例。。。需做判断。。。
java 代码
- public class Singleton{
- private Singleton(){}
-
- public static Singleton getInstance(){
- if(single==null){
- single=new Singleton();
- }
- return single;
- }
- private static Singleton single;
- }
这样就可以了。。。
接着就牵扯到了线程问题。。。假设有两个线程。。thread1,thread2。。thread1运行到第5行,然后跳到了thread2。。也运行到第5行之后。。。此时两线程都得到single为空。。。那么就会有两个实例了。。。解决办法。。同步。。
java 代码
- public class Singleton{
- private Singleton(){}
-
- public synchronized static Singleton getInstance(){
- if(single==null){
- single=new Singleton();
- }
- return single;
- }
- private static Singleton single;
- }
还有一种方法,提前实例化。。。
java 代码
- public class Singleton{
- private Singleton(){}
-
- public static Singleton getInstance(){
- return single;
- }
- private static Singleton single=new Singleton();
- }
此时single的static修饰符有起到另一个作用。。。因为static类型的属性,只在类加载时初始化一次。。。以后不会再初始化了。。确保了只有一个实例。。。
最后一种方法是再head first design pattern上看到的。。double-checked locking。。。
java 代码
- public class Singleton{
- private Singleton(){}
-
- public static Singleton getInstance(){
- if(single==null){
- synchronized(Singleton.class){
- if(single==null){
- single=new Singleton();
- }
- }
- }
- return single;
- }
- private volatile static Singleton single;
- }
目前对Singleton的理解就这么多。
分享到:
相关推荐
工厂三兄弟之抽象工厂模式(二) 工厂三兄弟之抽象工厂模式(三) 工厂三兄弟之抽象工厂模式(四) 工厂三兄弟之抽象工厂模式(五) 单例模式-Singleton Pattern 确保对象的唯一性——单例模式 (一) 确保对象的...
这个压缩包“java-design-patterns-master”显然是一个专注于Java设计模式的学习资源,旨在帮助开发者深入理解和应用这些模式。下面我们将详细探讨Java设计模式及其在实际开发中的应用。 1. **单例模式(Singleton...
《Design Patterns Java Companion》一书由James W. Cooper撰写,于1998年出版,是一本针对Java程序员的经典参考书。本书主要介绍了设计模式的基本概念,并深入探讨了几种关键的设计模式。 #### 创建型模式 创建型...
总结来说,"JAVA design pattern-java设计模式"的CHM文件是深入学习和理解Java设计模式的宝贵资源,通过学习和应用这些模式,开发者可以提高其代码质量,优化系统架构,从而更好地应对复杂的软件开发挑战。
"DesignPattern-master.zip"这个压缩包很可能包含了一个关于设计模式的项目或教程资源,用于学习和理解各种设计模式。 在这个“DesignPattern-master”目录中,我们可以期待找到不同类型的资源,如源代码示例、解释...
- **单例模式(Singleton Pattern)**:确保一个类只有一个实例,并提供一个全局访问点。 - **工厂模式(Factory Pattern)**:提供创建对象的接口,但让子类决定实例化哪个类。 - **观察者模式(Observer Pattern)**:...
本资料“Unity-Design-Pattern-master.zip”聚焦于将设计模式应用于Unity游戏开发,通过实例解析,帮助开发者提升代码质量和可维护性。 在Unity中,设计模式的应用有助于优化项目结构,提高代码复用,以及更好地...
##### 3.4 单例模式 (Singleton Pattern) 单例模式确保一个类只有一个实例,并提供一个全局访问点。 1. **确保对象的唯一性** - **目的**:确保某一个类只有一个实例存在。 - **优点**:节省资源,减少内存开销...
### 设计模式(Design Pattern) #### 一、概述 设计模式是软件开发中的一种最佳实践,它被广泛应用于解决常见的软件设计问题。设计模式的概念来源于建筑领域的架构模式,特别是受到建筑师克里斯托弗·亚历山大的...
创建型模式如单例(Singleton)、工厂方法(Factory Method)、抽象工厂(Abstract Factory)、建造者(Builder)和原型(Prototype),它们关注于如何创建对象。结构型模式包括适配器(Adapter)、桥接(Bridge)、...
本资料包“DesignPattern - DesignPattern.zip”提供了对C++11中23种设计模式的全面讲解,特别是结合指针使用的部分,以下是对这些知识点的详细阐述: 1. **单例模式(Singleton)**:确保一个类只有一个实例,并...
本资源"23种设计模式的C++实现DesignPattern-master.zip"包含了以下设计模式的C++实现: 1. **创建型模式**: - **单例模式(Singleton)**:保证一个类只有一个实例,并提供全局访问点。 - **工厂方法模式...
design-pattern-test 设计模式学习练习 模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns) 序号 模式&描述 包括 1 创建型模式---...
设计模式(Design Pattern)是软件工程中的一种经验总结,它是在特定上下文中为解决常见问题而提出的一套可...通过学习DesignPatterns.pdf文档,开发者能够深入理解这些模式,从而在实际项目中更高效地进行设计和编码。
《Pro Design Patterns in Swift》是一本专注于...通过学习《Pro Design Patterns in Swift》这本书,开发者不仅可以掌握各种设计模式,还能深入了解如何在实际项目中有效地应用它们,从而提升开发效率和软件的稳定性。
"Design*Pattern*Framework*4.5" 可能指的是一个基于 .NET Framework 4.5 的设计模式实现或教程集合。 设计模式是经验丰富的软件开发者的智慧结晶,它们被分为三类:创建型、结构型和行为型。创建型模式涉及对象的...
这个"design-pattern-in-java"项目中的代码示例涵盖了以上所有设计模式,通过实际的Java代码,你可以更直观地理解这些模式的工作原理,并学习如何在自己的项目中应用它们。设计模式的掌握对于提升代码质量、可维护性...
### Design Pattern 简明手册知识点详述 #### 一、接口型(interface)模式 **1. Adapter(适配器模式)** - **定义**:允许一个类接口与另一个不兼容的类接口协同工作。 - **分类**: - **继承型Adapter**:通过...
在给定的压缩包文件中,包含了九种经典的设计模式示例,它们分别是:单例模式(Singleton)、策略模式(StrategyPattern)、适配器模式(AdapterPattern)、装饰者模式(DecoratorPattern)、抽象工厂模式...
CoreJava-DesignPattern 创意设计模式 -- Abstract Factory - Done -- Builder - Done -- Factory Method -- Object Pool -- Prototype - Done -- Singleton - Done 结构设计模式 -- Adapter -- Bridge -- ...