Java设计模式简介:
Java设计模式是一个设计程序的思想,便于开发,优化、管理、关联等,是程序更加健壮。
Java设计模式分三种:创建型模式,结构型模式,行为型模式。
创建型模式:单例模式,工厂模式,抽象工厂模式,建造者模式,原型模式
结构模式: 适配器模式,桥接模式,装饰模式,组合模式,外观模式,
享元模式,代理模式
行为模式: 模板方法模式,命令模式,迭代器模式,观察者模式,中介者模式,
备忘录模式,解释器模式,状态模式,策略模式, 职责链模式,访问者模式
单例模式:顾名思义,可以保证该类只会存在一个对象,并为此实例提供一个全局访问点。
我们常见的单例模式有:
1、windows任务管理器,windows回收站等
2、读取配置文件的类(工具类),因为没有必要每次都读取配置文件,一般只有在项目一起动的时候需要配置。
3、网站计数器,一般都是单例的,为了实现同步,网站计数器必须只能为一个。
4、应用程序的日志,由于共享的日志文件一直都是打开的,所以只用一个实例去操作,否则不好拼接日志内容。
5、数据库连接池也一般会用单例模式,因为数据库链接是一种数据库资源。
6、操作系统中的文件系统,一般一个操作系统只会有一个文件管理系统
7、Servlet中的Application分发器也是典型的单例模式
8、在spring中,每个bean默认都是单例模式,以便于spring容器去管理
9、servlet编程中,每个servlet都是单例
10、springMVC中每一个控制器对象也是单例
单例模式的优点:只创建一个实例,可以大大减少系统性能开销,因为创建对象需要产生比较多的资源。
可以设置全局访问点,共享同一资源。
常见的五种单例模式实现的方式:
1、饿汉式:线程安全,调用率高,不能延时加载
2、懒汉式:线程安全,调用率不高,可以延时加载,用到时才会加载
3、线程检查锁式:jvm内部模型原因,偶尔会出问题,不建议使用
4、静态内部式:线程安全,调用率高,可以延时加载
5、枚举单例:线程安全,调用率高,不能延时加载
有人可能对“调用效率”不是很理解。
做个说明:如果有synchronized修饰的方法执行效率和调用效率比不用synchronized修饰的方法
要低很多,因为多个线程同时调用时,就会出现同步锁,那就会是方法出现阻塞。
如:懒汉式:得到对象的方法是用synchronized修饰的,所以调用效率不高
饿汉式:得到对象的方法不用synchronized修饰,所以调用效率高
获取效率:饿汉式==静态内部类==枚举>双重监测锁>>懒汉式
除了枚举单例以为,其他的是可以被反射和反序列化生成多个对象,违反单例模式规则。
处理多个对象的规则:
反射:构造方法中做判断
反序列化:重写readResolve()方法,直接返回单例对象即可