设计模式

设计模式

设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格以及解决问题的思考方式,独立于编程语言。

设计模式共有以下23中,我们选取常用的集中进行讲解:
在这里插入图片描述

一、单例模式Singleton

笔试当中可能要求手写,重点★

        所谓单例模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例 ,并且该类只提供一个取得其对象实例的方法。
        如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造器的访问权限设置为private,这样,就不能用new操作符在类的外部产生类的对象了,但在类内部仍可以产生该类的对象。因为在类的外部开始还无法得到类的对象,只能调用该类的某个静态方法已返回内部创建的对象,静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该类对象的变量也必须定义成静态的。

1. 实现方式一:饿汉式

public class SingletonTest1{
     
	public static void main(){
     
		Singleton singleton1 = Singleton.getInstance() ;
		Singleton singleton2 = Singleton.getInstance() ;
		System.out.println(singleton1 == singleton2) ;   //true
	}
}

class Singleton{
     
	// 1.私有化构造器
	private Singleton() {
     
	}

	// 2. 内部创建类的对象
	// 4. 要求此对象也必须声明为静态的
	private static Singleton instance = new Singleton() ;
	
	// 3. 提供公共的静态方法,返回类的对象
	public static Singleton getInstance() {
     
		return instance ;
	}
}

或者也可以放在静态代码块里:

private static Singleton instance = null ;
static{
     
	instance = new Singleton() ;
}
public static Singleton getInstance(){
     
	return instance ;
}

2. 实现方式二:懒汉式(存在线程安全问题)

public class SingletonTest1{
     
	public static void main(){
     
		Singleton singleton1 = Singleton.getInstance() ;
		Singleton singleton2 = Singleton.getInstance() ;
		System.out.println(singleton1 == singleton2) ;   //true
	}
}

class Singleton{
     
	// 1.私有化构造器
	private Singleton() {
     
	}

	// 2. 声明当前类对象,没有初始化
	// 4. 此对象也必须声明为static
	private static Singleton instance = null ;
	
	// 3. 提供public、static的返回当前类对象的方法
	public static Singleton getInstance() {
     
		if(instance == null){
     
			instance = new Singleton() ;
		}
		return instance ;
	}
}

3. 区分饿汉式和懒汉式

饿汉式:坏处:对象加载时间过长 好处:线程安全
懒汉式:好处:延迟对象的创建 坏处:目前的写法线程不安全,回头补充线程安全的写法

4. 单例模式的优点

由于单例模式只生成一个对象,减少了系统性能开销,当对一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方法来解决。比如java.lang.Runtime

5. 单例模式的应用场景
设计模式_第1张图片

你可能感兴趣的:(java,设计模式,单例模式,面试java:单例模式,面试题,常见设计模式)