设计模式
1.常用设计模式有哪些
比较常见就是单例模式,工厂模式等。
具体说下单例模式,单例模式主要作用是保证在Java程序中,一个类Class只有一个实例存在。比如spring默认就是单例和生成唯一序列的UUID的环境中使用
2.简单说下单例模式
单例模式主要作用是保证在Java程序中,一个类Class只有一个实例存在。适用于
1.需要生成唯一序列的环境,比如生成唯一序列
2.只需要一个线程池对象等。这样可以就保证一个在全局使用的类不被频繁地创建与销毁,节省系统资源。
3.单例模式的步骤
单例实现主要是通过以下两个步骤:
1.创建本类私有化静态final类对象
2.私有化构造方法
3.创建静态方法创建好的类对象返回出去
4.单例模式的几种模式
1.饿汉式(线程安全)
类加载时就初始化实例,避免了多线程同步问题
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton (){}
public static Singleton getInstance() {
return instance;
}
}
2.懒汉式(线程安全)
获取实例的getInstance()方法上加了同步锁。保证了多线程场景下的单例
public class Singleton {
private static Singleton instance;
private Singleton (){}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
3.懒汉式(线程不安全)
第一次调用才初始化,实现了懒加载的特性。多线程场景下禁止使用,因为可能会产生多个对象,不再是单例
public class Singleton {
private static Singleton instance;
private Singleton (){}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
5.单例模式的饿汉式和懒汉式的区别
1.线程安全方面:饿汉式天生就是线程安全的,可以直接用于多线程而不会出现问题,懒汉式本身是非线程安全的。
2.资源加载和性能方面:
饿汉式在类创建的同时就实例化一个静态对象出来,不管之后会不会使用这个单例,都会占据一定的内存,但是相应的,在第一次调用时速度也会更快,因为其资源已经初始化完成。
而懒汉式顾名思义,会延迟加载,在第一次使用该单例的时候才会实例化对象出来,第一次调用时要做初始化,如果要做的工作比较多,性能上会有些延迟,之后就和饿汉式一样了。
6.简单说下工厂模式
工厂模式分为简单工厂模式,工厂方法模式,抽象工厂模式
简单工厂模式是由一个具体的类去做工厂类,创建其他类的实例
工厂方法模式是有一个抽象的父类定义公共接口,子类负责生成具体的对象
抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。