设计模式(单例模式和原型模式)

设计模式

最近出去面试,发现自己对设计模式上面有点生疏了,也的的确确忘了很多,这边就稍微的巩固一下自己的设计模式.面试官也说到了,你如果都不知道这些设计模式的存在,你怎么知道要去使用他, 一直去了解分布式结构的使用,却忘了最基本的东西的确该打.

单利模式

单利模式,我相信我们在开发过程中最容易碰见,我连这个都忘记了.果然不行.

懒汉式单例模式
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之间方法的单利已经存在了.

单利模式的应用场景
  1. 在我只需要一个对象实例的时候.
  2. 当某类需要频繁实例化,而创建的对象又频繁被销毁的时候.

说白了,不需要重复的获取这个类的时候,就可以考虑用单利模式, 我实际工作中就是在调用第三方接口的时候使用过.

原型模式

其实说原型模式,我个人更加觉得是克隆模式, 主要原理就是实现Cloneable类 来重写clone() 方法, 直接就能返回一个类型一样的对象,但是对象的地址是不相等的.

public class TestController implements Cloneable{
	//实现cloneable接口 重写方法clone 返回对象自己
    @Override
    protected TestController clone() throws CloneNotSupportedException {
        return (TestController) super.clone();
    }
}

工作中有可以用上, 需要调用相似功能的类, 就可以使用原型模式开发.

什么时候使用场景

1.对象之间相同或相似,即只是个别的几个属性不同的时候。
2.对象的创建过程比较麻烦,但复制比较简单的时候。

你可能感兴趣的:(java设计模式)