设计模式
最近出去面试,发现自己对设计模式上面有点生疏了,也的的确确忘了很多,这边就稍微的巩固一下自己的设计模式.面试官也说到了,你如果都不知道这些设计模式的存在,你怎么知道要去使用他, 一直去了解分布式结构的使用,却忘了最基本的东西的确该打.
单利模式
单利模式,我相信我们在开发过程中最容易碰见,我连这个都忘记了.果然不行.
懒汉式单例模式
public class LanHan{
//volatile 保证了并发问题, 使得多个线程都能够使用到最新的变量
private static volatile LanHan lanhan = null;
// 保障了不会被外部类实例化
private LanHan(){};
public static sychronized LanHan getLanHan(){
if(lanhan == null){
lanhan = new LanHan();
}
return lanhan;
}
}
这里一定需要记住 如果需要保障并发问题 需要用到 volatile ,和sychronized这个关键字
饿汉式单例模式
public class EerHan{
//直接new了
private static final EerHan eerhan = new EerHan();
private ErtHan(){};
public static EerHan getEerHan(){
return eerhan;
}
}
保证了类一旦加载就会创建单利模式,保证了再调用getEerHan之间方法的单利已经存在了.
单利模式的应用场景
- 在我只需要一个对象实例的时候.
- 当某类需要频繁实例化,而创建的对象又频繁被销毁的时候.
说白了,不需要重复的获取这个类的时候,就可以考虑用单利模式, 我实际工作中就是在调用第三方接口的时候使用过.
原型模式
其实说原型模式,我个人更加觉得是克隆模式, 主要原理就是实现Cloneable类 来重写clone() 方法, 直接就能返回一个类型一样的对象,但是对象的地址是不相等的.
public class TestController implements Cloneable{
//实现cloneable接口 重写方法clone 返回对象自己
@Override
protected TestController clone() throws CloneNotSupportedException {
return (TestController) super.clone();
}
}
工作中有可以用上, 需要调用相似功能的类, 就可以使用原型模式开发.
什么时候使用场景
1.对象之间相同或相似,即只是个别的几个属性不同的时候。
2.对象的创建过程比较麻烦,但复制比较简单的时候。