设计模式
对问题行之有效的解决方式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。其实是一种思想。java开发中有23种设计模式。总体来说分为三类:
创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。
其实还有两类:并发型模式和线程池模式。
Singleton(单例模式)
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
单例模式的特点:
1.单例类只能有一个实例
2.单例类必须自己创建自己的唯一实例。
3.单例类必须给所有其他对象提供这一实例。
单例模式解决的问题:可以保证一个类在内存中的对象的唯一性。必须对于多个程序使用同一个配置信息对象时,就必须保证对象的唯一性。
如何保证对象的唯一性:
1.不允许其他程序用new创建该类对象;
2.在该类中创建一个本类实例;
3.对外提供一个方法让其他程序可以获取该对象。
对应的步骤:
1.私有化该类构造函数;
2.通过new 在本类中创建一个本类对象;
3.定义一个公有的方法,将创建对象返回。
class Single{//饿汉式
static Single s=new Single();//创建一个本类对象
private Single()//私有化构造函数
{
}
public static Single getInstance(){//返回创建的对象
return s;
}
}
class static Single2{//懒汉式
private static Single2 s=null;//声明一个本类对象
private Single2()//构造函数私有化
{}
public static Single2 getInstance(){//返回创建对象
if(s==null)
s=new Single2();
return s;
}
}
class SignleDemo{
public static void main(String[] args){
Single ss=Single.getInstance();
//Single ss=Single.s; 这种方式封装性不好,不可控
}
}
饿汉式与懒汉式单例设计模式的区别:
1.饿汉式的特点是类一加载,对象就已经存在了;懒汉式的特点是类加载进来时并没有对象,只有调用了getInstance()方法时才会创建对象,因此懒汉式又叫延迟加载形式。
2.懒汉式被多线程并发访问时,有可能导致保证不了对象的唯一性,存在安全隐患;饿汉式没有这种隐患。
3.开发中用饿汉式较多,这是因为单例设计模式就是为了获取一个唯一的对象,所以对象一定会被创建,先加后加都可以,且饿汉式不存在安全隐患。
注意事项:
1.不要使用单例模式存取全局变量。这违背了单列模式的用意,最好放到对应类的静态成员中。
2.不要将数据库连接做成单例,因为一个系统可能与数据库有多个连接,并且在有连接池的情况下,应当尽可能及时释放连接。Singleton模式由于使用静态成员存储类实例,所以可能会造成资源无法及时释放。