? 设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格以及解决问题的思考方式,设计模式免去了我们自己再去思考和摸索。就像经典的棋谱,对于不同的棋局我们使用不同的棋谱。
? 创建型模式:工厂方法模式 抽象工厂模式 单例模式 建造者模式 原型模式
? 结构型模式: 适配器模式 装饰器模式 代理模式 外观模式 桥接模式 组合模式 享元模式
? 行为型模式:策略模式 模板方法模式 观察者模式 迭代子模式 责任链模式 命令模式 备忘录模式 状态模式 访问者模式 中介者模式 解释器模式
? 类的单例设计模式:采取一系列的方法保证整个软件系统中,对某个类只能 存在一个对象实例,并且该类只提供一个取得该对象实例的方法。
? 具体操作:将该类的构造器设置为private,通过类的静态方法获取该类的 对象,静态方法使用的该类对象的变量也要设置为静态的
饿汉式:
public class MyTest01 {
public static void main(String[] args){
Bank bank1=Bank.getInstance();
Bank bank2=Bank.getInstance();
System.out.println(bank1==bank2);
}
}
class Bank{
private static Bank instance=new Bank();
private Bank(){
}
public static Bank getInstance(){
return instance;
}
}
懒汉式:
public class MyTest01 {
public static void main(String[] args){
Bank bank1=Bank.getInstance();
Bank bank2=Bank.getInstance();
System.out.println(bank1==bank2);
}
}
class Bank{
private static Bank instance;
private Bank(){
}
public static Bank getInstance(){
if(instance==null){
instance=new Bank();
}
//instance=new Bank();
return instance;
}
}
其实懒汉式可以延迟对象的创建,只有到使用的时候才会创建;饿汉式类一被在加载就自动创建了。
饿汉式天生就是线程安全的。懒汉式其实存在线程不安全的情况。比如说我有两个线程,第一个第一次调用getInstance,所以instance是null,他去执行new的时候,线程堵塞了,第二个线程也去调用getInstance,此时这两个线程都会进行new操作,就产生了线程不安全
应用:java.lang.Runtime典型的单例模式
? 网站的计数器
? 应用程序的日志应用
? 数据库连接池
? 读取配置的类
? Application入口程序
? windows中的任务管理器
? windows中的回收站
原文:https://www.cnblogs.com/gengBlog/p/15302869.html