是一种设计模式。一种设计的风格,思考方式,固定的套路,和使用哪种语言无关。
之后的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:
SpringBoot 整合 webapp时 访问404的解决办法
SpringCloud怎么调用多个服务的信息
状态码:415,发送HTTP请求返回415状态码的解决办法
Vue 打开页面时就加载方法,例如查询
Spring整合Mybatis
SpringCloud 加入 thymleaf前端页面的方法
Controller之间的跳转
Spring AOP的实现原理
This may be the result of an unspecified view, due to default view name generation
行动消除疑虑