是一种设计模式。一种设计的风格,思考方式,固定的套路,和使用哪种语言无关。
之后的MVC模式,并不是一个具体的解决模式,是整个框架的布局。
在整个软件系统中,对于某个类只能存在一个对象,并且该类只提供一个取得该对象的方法。
在类的内部设置私有(private)权限构造器,这样就无法在类的外部创建新的对象了。
调用方法设置为静态(static)权限,因为不使用静态就需要使用对象来调取方法。
因为调用方法是静态的,所以调用的对象也需要是静态的。
class Bank{
//1.私有构造器
private Bank(){
}
//2.类的内部创建实例
private static Bank instance=new Bank();
//3.获取实例的方法,必须声明为static
public static Bank getInstance(){
return instance;
}
}
class GirlFriend{
//1.私有化构造器
private GirlFriend(){
}
//2.声明当前类的实例
private static GirlFriend instance= null;
//3.get方法调用时再创建实例,如未创建对象,则在方法内部创建对象
public static GirlFriend getInstance(){
//如果没有就创建一个再返回去
if(instance==null){
instance=new GirlFriend();
}
return instance;
}
}
综上,对比两种方式,主要区别在于 饿汉式先创建好了实例对象,懒汉在调用时才创建对象。
饿汉式,立即加载,随着类的加载的加载。生命周期特别长,在不调用时依然存在。没法回收,算是一种内存泄漏。
懒汉式,延迟加载,调用时才加载。
饿汉式 | 懒汉式 |
---|---|
写法简单,使用时加载快 | 调用时需要检查实例是否存在,加载慢 |
内存占用时间长 | 内存占用时间短 |
线程安全 | 容易多个线程同时创建实例 |
windows中的 回收站、任务管理器这种都是唯一的,java中的Runtime类、application、数据连接池等等也是。
主要突出唯一性,“一个就行”的意思。
推荐阅读:
vue.js:634 [Vue warn]: Property or method "userName" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. See:
状态码:415,发送HTTP请求返回415状态码的解决办法
SpringBoot 整合 webapp时 访问404的解决办法
Vue 打开页面时就加载方法,例如查询
SpringCloud怎么调用多个服务的信息
Spring整合Mybatis
SpringCloud 加入 thymleaf前端页面的方法
Controller之间的跳转
Spring AOP的实现原理
This may be the result of an unspecified view, due to default view name generation
行动消除疑虑