设计模式之-单例模式
设计模式是软件工程方法迭代多年的研究成果,java中常用设计模式主要包含23中,包括:单例,观察者,适配器,工厂方法,抽象工厂,代理模式,装饰模式,模板方法等;
其中单例模式是一种开发中非常常见模式,指的是在程序运行中对象的获取永远是同一个,比如说一些资源池(常量池,连接池,线程池)一般都是基于单例模式实现,单例模式的实现原理为:
类中构造器必须使用private修饰
类中必须提供一个用户返回当前对象实例的静态方法
类中存在一个静态的变量,类型为当前类型
java中单例模式又分为两种:
1. 饿汉模式
饿汉模式即在类被初始化时就创建一个实例,后续的返回永远是当前实例对象
public class Singleton {
//饿汉模式(以空间换时间)
private static Singleton instance = new Singleton();
private Singleton(){
}
public static Singleton getInstance(){
return instance;
}
}
饿汉模式是一种以空间换取时间的设计,在类初始化时即创建对象,后续无需在耗时创建。
2.懒汉模式
懒汉模式指的是在类初始化时不创建任何实例,在提供的静态方法中判断对象是否存在,若不存在则创建:
public class Singleton2 {
private static Singleton2 instance = null;
private Singleton2(){
}
//懒汉模式(以时间换空间)
public static Singleton2 getInstance(){
if(instance == null){
instance = new Singleton2();
}
return instance;
}
}
懒汉模式是一种以时间换取空间的设计
设计模式参考书籍
《设计模式之禅》
《设计模式》GOF
final关键字
final表示最终的,终极的;final关键字可以用于修饰类,属性,方法:
被final修饰类不允许被继承(断子绝孙类)
被final修饰变量不予许修改(但是被final修饰的变量必须初始化,也可以在构造器初始化)
被final修饰的方法不允许被重写
//final修饰的类不允许被继承
public final class FinalTest {
//final属性一旦初始化则不可修改
final String msg;
//常量
static final int TYPE = 1;
//可以在构造器中初始化final属性
public FinalTest(){
msg = "hello";
}
public FinalTest(String msg){
this.msg = msg;
}
//final方法不允许被重写
public final void m(){
final int i = 10;
}
}
final关键字在定义变量时通常跟static组合为常量
public class Test{
public static final String STATUS_OFF = “off”;
public static final String STATUS_ON = “on”;
public static final int ORDER_UNSINGE =0;
}