- 浏览: 138962 次
文章分类
- 全部博客 (149)
- Java (41)
- 设计模式 (23)
- php (2)
- C++ (2)
- Linux (6)
- C (1)
- JavaEE (27)
- javascript (2)
- uplodify (1)
- Mybatis (2)
- Maven (4)
- Lucene (3)
- commons (1)
- Spring (7)
- SQL (3)
- mahout (1)
- MySQL (2)
- extjs4.2.1 (2)
- ubuntu (1)
- hadoop (1)
- hibernate (1)
- Spring JPA (2)
- JPA 2.0 (1)
- express (1)
- redis (2)
- angularjs (1)
- git (1)
- Python (1)
- logging (2)
最新评论
-
xlaohe1:
controller返回的是一个POJO对象,然后用@Resp ...
Spring MVC 4.X ResponseBody 日期类型Json 处理 -
TRAMP_ZZY:
能帮到你,我也很高兴。
Spring MVC 4.X ResponseBody 日期类型Json 处理 -
jobzjc:
第一段有帮到我。如果是非对象,Object方式传递的时候,第一 ...
Spring MVC 4.X ResponseBody 日期类型Json 处理 -
TRAMP_ZZY:
dingran 写道为什么,我怎么就没找到System > ...
Ubuntu 12.04 设置 IBus 开机启动 -
dingran:
为什么,我怎么就没找到System >> Pref ...
Ubuntu 12.04 设置 IBus 开机启动
1. 单例模式
Ensure a class has only instance, and provide a global point of access to it .
(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。)
单例模式的优点:
(1)减少了内存的开销
(2)减少系统性能开销
(3)单例模式可以避免对资源的多重占用,例如写文件动作,由于一个实例存在内存中,避免对一个资源文件的
同时写操作。
(4)单例模式可以在系统设置全局的访问点,优化和共享资源访问,例如可以设计一个单例类,负责所有数据表
映射处理。
单例模式的使用场景:
(1)要求生成唯一的序列号的环境。
(2)整个项目中需要一个共享访问点或共享数据,例如一个Web页面上面的计数器,可以不把每次刷新纪录到数
据库中,使用单例模式保持计数器的值,并确保是线程安全的。
(3)穿件一个对象需要消耗过多的资源,例如访问IO和数据库等资源。
(4)需要定义大量的静态常量和静态方法的环境,可以采用单例模式,也可以直接使用static 声明。
单例模式处理多线程访问安全性问题:
(1)加锁(synchronized)开销太大,影响性能
(2)急切的创建实例
(3)保证性能的同步方式
单例模式的扩展(有上限的单例模式)
该种模式是单例模式的扩展,我们可以在设计时就决定内存中有多少个实例,方便系统进行扩展。修正单利可能
存在的性能问题,提高系统的响应速度。例如读取文件,可以在系统启动时完成初始化工作。
Ensure a class has only instance, and provide a global point of access to it .
(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。)
/** * ClassName:Singleton <br/> * Function: 单例模式的通用实现方法. <br/> * Reason: 单例模式的通用实现方法. <br/> * Date: 2013年11月17日 下午3:16:22 <br/> * @author zhangzhaoyu * @version * @since JDK 1.7 * @see */ public class Singleton { private static final Singleton singleton = new Singleton(); private Singleton() {} public static Singleton getSingleton() { return singleton; } public static void doSomething() { } } // 线程不安全的单例 public class Singleton { private static Singleton singleton = null; private Singleton() {} public static Singleton getSingleton() { if (singleton == null) { singleton = new Singleton(); } return singleton; } }
单例模式的优点:
(1)减少了内存的开销
(2)减少系统性能开销
(3)单例模式可以避免对资源的多重占用,例如写文件动作,由于一个实例存在内存中,避免对一个资源文件的
同时写操作。
(4)单例模式可以在系统设置全局的访问点,优化和共享资源访问,例如可以设计一个单例类,负责所有数据表
映射处理。
单例模式的使用场景:
(1)要求生成唯一的序列号的环境。
(2)整个项目中需要一个共享访问点或共享数据,例如一个Web页面上面的计数器,可以不把每次刷新纪录到数
据库中,使用单例模式保持计数器的值,并确保是线程安全的。
(3)穿件一个对象需要消耗过多的资源,例如访问IO和数据库等资源。
(4)需要定义大量的静态常量和静态方法的环境,可以采用单例模式,也可以直接使用static 声明。
单例模式处理多线程访问安全性问题:
(1)加锁(synchronized)开销太大,影响性能
public class Singleton { private static Singleton singleton; private String name; private Singleton() {} public static synchronized Singleton getInstance() { if (singleton == null) { singleton = new Singleton(); } return singleton; } public void setName(String name) { this.name = name; } public String getName() { return this.name; } public String toString() { return "Singleton[name=" + this.name + "]"; } }
(2)急切的创建实例
public class Singleton2 { private static Singleton2 singleton = new Singleton2(); private String name; private Singleton2() {} public static Singleton2 getInstance() { return singleton; } public void setName(String name) { this.name = name; } public String getName() { return this.name; } public String toString() { return "Singleton[name=" + this.name + "]"; } }
(3)保证性能的同步方式
public class Singleton2 { private static volatile Singleton2 singleton; private String name; private Singleton2() {} public static Singleton2 getInstance() { if (singleton == null) { synchronized (Singleton2.class) { if (singleton == null) { singleton = new Singleton2(); } } } return singleton; } public void setName(String name) { this.name = name; } public String getName() { return this.name; } public String toString() { return "Singleton[name=" + this.name + "]"; } }
单例模式的扩展(有上限的单例模式)
该种模式是单例模式的扩展,我们可以在设计时就决定内存中有多少个实例,方便系统进行扩展。修正单利可能
存在的性能问题,提高系统的响应速度。例如读取文件,可以在系统启动时完成初始化工作。
/** * ClassName:Emperors <br/> * Function: fixed size. <br/> * Reason: fixed size. <br/> * Date: 2013年11月17日 下午3:38:24 <br/> * @author zhangzhaoyu * @version * @since JDK 1.7 * @see */ public class Emperors { private static int maxNumOfEmperor = 2; private static ArrayList<String> nameList = new ArrayList<String>(); private static ArrayList<Emperors> emperorList = new ArrayList<Emperors>(); private static int countNumOfEmperor = 0; static { for (int i=0; i<maxNumOfEmperor; i++) { emperorList.add(new Emperors("King " + (i+1))); } } public Emperors() {} public Emperors(String name) { nameList.add(name); } public static Emperors getInstance() { Random random = new Random(); countNumOfEmperor = random.nextInt(maxNumOfEmperor); return emperorList.get(countNumOfEmperor); } public static void say() { System.out.println(nameList.get(countNumOfEmperor)); } }
发表评论
-
设计模式-享元模式(Flyweight)
2014-06-20 13:11 570使用共享对象可有效地支持大量的细粒度的对象。要求细粒度的对象 ... -
设计模式-桥接模式
2014-06-19 17:12 343将抽象和实现解耦,使得两者可以独立地变化。 桥接模式使用了 ... -
设计模式-状态模式
2014-06-16 10:37 421状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像 ... -
设计模式-代理和动态代理模式
2014-06-13 14:57 4711.简单代理模式 interface Interface ... -
java 迭代器
2014-06-11 18:04 636public class ReversibleArrayL ... -
设计模式-内部类工厂模式
2014-06-10 23:33 540public interface Service { ... -
设计模式-迭代器模式
2014-06-10 14:37 463迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又 ... -
设计模式-模板方法
2014-06-05 13:00 367public abstract class Caffein ... -
设计模式-适配器模式
2014-06-03 22:14 433适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让 ... -
设计模式-命令模式
2014-06-02 23:24 388public interface Command { ... -
设计模式-工厂方法
2014-06-01 18:04 490public abstract class PizzaSt ... -
设计模式-观察者模式
2014-06-01 11:03 4811. 利用Java 内置的类和接口实现观察者模式 publ ... -
设计模式-策略模式
2013-12-16 12:50 485Define a family of algorithms ... -
设计模式-装饰模式
2013-12-16 12:49 466Attach additional responibili ... -
设计模式-责任链模式
2013-12-11 18:00 548Avoid coupling the sender of ... -
设计模式-命令模式
2013-12-08 15:11 448命令模式是一个高内聚的模式。 Encapsulate ... -
设计模式-中介者模式
2013-12-08 12:29 409在多个对象依赖的情况下,通过加入终结者角色,取消了多个对象 ... -
设计模式-建造者模式(生成器模式)
2013-11-20 11:35 547ArrayList 或者 HashMap 如果定义为类的成员 ... -
设计模式-模板方法模式
2013-11-20 10:45 457Define the skeleton of an algor ... -
设计模式-抽象工厂模式
2013-11-18 15:49 438Provide an interface for creati ...
相关推荐
李建忠老师的设计模式-单例模式讲解,示例以C++编程语言呈现。
设计模式-单例模式脑图
Java设计模式-单例模式详解 单例模式是 Java 设计模式中的一种常用的设计模式,旨在保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式的目的是为了保证在一个进程中,某个类有且仅有一个实例。 ...
ava常用设计模式-单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,有以下特点: 1. 单例类只能有一个实例。 2. 单例类必须自己创建自己的唯一实例。 3. 单例类必须给所有其他对象提供这一...
本资源“一例读懂设计模式-单例模式、简单工厂模式.zip”旨在帮助初学者通过实例深入理解这两种重要设计模式:单例模式和简单工厂模式。以下是关于这两个模式的详细讲解。 1. **单例模式**: 单例模式是一种限制类...
设计模式-单例模式 单例模式是一种常见的设计模式,它的主要作用是确保在内存中仅创建一次对象,并提供一个全局访问点。单例模式有两种类型:饿汉类型和懒汉类型。 饿汉类型的单例模式是在类加载时创建对象,例如...
单例模式是一种常用的设计模式,它在软件工程中扮演着控制类实例化过程的角色,确保一个类只有一个实例,并提供全局访问点。这种模式在PHP中尤其常见,特别是在需要频繁实例化然后销毁的对象,或者需要控制共享资源...
在Java编程语言中,设计模式是一种经过验证的解决常见软件设计问题的最佳实践。单例模式是其中最常用的一种,它的核心思想是确保一个类只有一个实例,并提供全局访问点。单例模式的应用场景包括:控制资源的访问、...
JAVA-设计模式-创建型模式-单例模式
android 单例模式 干货 告诉你哪种单例模式最实用 最好用 不再迷茫
**单例模式**是软件设计模式中的一种,属于创建型模式。在C++中,单例模式确保一个类只有一个实例,并提供一个全局访问点。这种模式通常用于管理共享资源,如数据库连接、日志系统或者配置文件等。单例模式的主要...
单例模式是软件设计模式中的一种,它保证一个类只有一个实例,并提供全局访问点。这种模式在许多场景下非常有用,比如控制共享资源、管理系统级别的对象,如数据库连接池或者线程池等。单例模式的核心在于限制类的...
压缩包代码是一个简单的C++单例模式实现。 在这个例子中,Singleton 类有一个私有的构造函数和一个私有的析构函数,这防止了外部代码直接创建或销毁实例。getInstance 方法是一个静态方法,它返回一个指向 Singleton...
单例模式是软件设计模式中的一种经典模式,其主要目的是保证一个类只有一个实例,并提供一个全局访问点。在Java中,有多种实现单例模式的方法,包括简单实现、双重检查锁定(Double-Checked Locking)、静态内部类和...
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...
单例模式是一种常见的创建型设计模式,其核心思想在于确保一个类仅有一个实例存在,并且该实例由该类自行创建,随后向整个系统提供这一唯一实例。 #### 类图解析 在设计模式中,类图是一种直观展示类结构及关系的...
在iOS开发中,设计模式是解决常见编程问题的模板,为代码组织提供了标准结构。其中,单例模式是一种被广泛使用的模式,它确保一个类在整个应用程序中只有一个实例,并且提供了一个全局访问点来获取这个实例。这样的...
### Java设计模式——单例模式详解 #### 一、单例模式概述 单例模式是设计模式中的一个重要组成部分,属于创建型模式之一。其主要作用是确保某个类仅有一个实例存在,并提供一个全局访问该实例的方法。这在很多场景...