设计模式(1)单例模式

**刚接触设计模式的时候感觉很高大上的感觉,老师怎么写代码,就怎么写,没有彻底的领会设计模式的深层次的思想。借着复习的时间总结一下。**

1. 介绍:设计模式其实就是一种反复使用的,多数人知晓的,经过分类编辑的代码设计经验的总结。它停留在思想和经验的层面上。
2. 目的:提高代码的重用性,使代码更容易理解,可靠性高。
## 静态关键字static ##
因为首先是设计模式里边最简单也最长用的单例模式。说以必须说一下静态关键字这是个人的复习总结,大牛们可以直接略过

  1. static修饰方法,属性,代码段。
  2. static修饰的方法为静态方法,属性为静态属性,在类加载的时候就已经开辟内存空间,并且无论对象创建多少次,静态的属性和方法只有一份。静态方法不能访问非静态成员,一般方法
private static String name;//私有静态属性
public static SqlSession getSession()//共有静态方法
  1. 静态代码段在类加载的时候执行,为静态属性初始化
static{
name=new String("dmc is good!");
}

单例模式
单例模式的作用就是产生单一的对象,因为有些时候例如对配置文件,工具类,缓存,线程池,日志对象等,这些资源的对象不必创建多个,因为都是一样的,而且浪费资源,所以单例模式就是解决这个问题。
单例模式一般有以下的几个性质。
1. 构造器私有。
2. 定义静态的私有属性。
3. 定义一个公共方法返回私有属性。
单例模式有两种常用的模式,懒汉式和饿汉式(一提懒汉想起了点什么。。。)
为什么要构造器私有?下面就是一个平常的类

public class Singleton{
    /*public Singleton() {
        super();
    }*/
}

如果要实例化这个类的话很简单Singleton single=new Singleton();
这是java类的构造器的特点,类中如果没有手动生命构造器,系统会自动的为类生命一个默认的构造器。这样需要一个对象就实例化一次,就导致了多个对象的出现,但是这些对象的功能都是一样的,所以没有必要多次实例化,理论上只要实例化一次,之后如果需要就用这个单一的对象。所以就不能把构造方法设置成公共的,而是设置成
私有的构造器private Singleton(){} //私有构造器
这是我们想要通过new Singleton()是获取不到对象的。只能通过单例类中定义的公共的方法把私有的单例类对象返回。

1.饿汉式

public class Singleton {
        private Singleton(){}  //私有构造器
        private static Singleton instance=new Singleton();//类加载是就初始化
        public static Singleton getInstance(){
            return instance;  //返回单例对象
        }
}

这里的单例对象实在类加载的时候就已经创建。不管需不需要。
2.懒汉式

public class Singleton {
    private Singleton() {} // 私有构造器
    private static Singleton instance = null;// 类加载是就初始化
    public static synchronized Singleton getInstance() {
        if (instance == null)
            instance = new Singleton();// 第一次使用的的时候加载
        return instance; // 返回单例对象
    }
}

懒汉式涉及到线程安全的问题,可以在方法上加上同步锁。但是会影响效率,一般都用不到,这里仅考虑单例模式的这种思想。
两种模式的区别
饿汉模式类加载的时候比较慢,在运行时获取对象比较块,线程安全。
懒汉模式类加载的时候比较快,在运行时获取对象上慢,线程不安全的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值