设计模式学习-单例模式

来源:互联网 发布:怎么筛选excel数据 编辑:程序博客网 时间:2024/06/05 01:18

一、单例模式概念

单例模式是设计模式中比较简单的一种。适合于一个类只有一个实例的情况,比如窗口管理器,打印缓冲池和文件系统,
它们都是原型的例子。典型的情况是,那些对象的类型被遍及一个软件系统的不同对象访问,因此需要一个全局的访问
指针,这便是众所周知的单例模式的应用。当然这只有在你确信你不再需要任何多于一个的实例的情况下。 
单例模式的用意在于前一段中所关心的。通过单例模式你可以: 
                     1、确保一个类只有一个实例被建立 
                     2、提供了一个对对象的全局访问指针 
                     3、在不影响单例类的客户端的情况下允许将来有多个实例

二、单例模式分类

经典的单例模式有两种,懒汉式、饿汉式

懒汉式的优点是:写起来比较简单,而且不存在多线程同步问题,避免了synchronized所造成的性能问题;缺点是:初始化类的时候就需要构造实例,(即便你还没有用到这个实例),因此在某些特定条件下会耗费内存。

饿汉式的优点是:只有第一次用到的时候才进行初始化,故在还没用到的时候,会省内存; 缺点是:需要用synchronized关键字进行锁的控制,性能会差一些,代码写起来麻烦些。

三、两种单例模式实现

懒汉式:

Java代码

public class Singleton {/* * 单例模式:单个实例服务于整个应用 * 懒汉式单例:只有在第一次请求实例的时候创建,并且只在第一次创建后,以后不再创建该类的实例 */// 1.一个私有的指向自己的静态变量private static Singleton instance;// 2.私有的构造方法,保证不能从外部创建对象private Singleton(){}// 3.公开的静态工厂方法,返回该类的唯一实例(当发现没有实例没有初始化的时候才初始化)public static Singleton getInstance(){if(instance == null){instance = new Singleton();System.out.println("创建Singleton类的实例");}else {System.out.println("实例已经创建,不能再创建");}return instance;}}// 测试类class Test{public static void main(String[] args) {Singleton s = Singleton.getInstance();System.out.println(Singleton.getInstance());System.out.println(Singleton.getInstance());System.out.println(Singleton.getInstance());}}

饿汉式:

Java代码

public class Singleton2 {/* * 恶汉单例模式:在类加载的时候就创建一个单例模式. */// 1.私有的构造函数,确保不能在类的外部访问该类的构造函数private Singleton2(){System.out.println("构造函数执行了");}// 2.私有的唯一的静态实例变量,在类加载的时候就创建好单例对象private final static Singleton2 instance = new Singleton2();// 3.公开的静态工厂返回此类的唯一实例public static Singleton2 getInstance(){return instance;}}// 测试类class Test2{public static void main(String[] args) {Singleton2 s = Singleton2.getInstance();System.out.println(s);Singleton2 s2 = Singleton2.getInstance();System.out.println(s2);System.out.println(Singleton2.getInstance());System.out.println(Singleton2.getInstance());}}



0 0
原创粉丝点击