直播软件搭建,Java设计模式单例模式
直播软件搭建,Java设计模式单例模式
1.单例模式的例子
根据单例模式的特征,现在来写一下代码。
1.只有一个实例。那么就是得把实例作为该类的属性同时需要用static表示其唯一,用private来体现一下封装性吧更美观。
2.创建类的对象需要有构造器吧,因为只能有一个实例,也就是说外部不能创建这个类的对象,所以构造器必须私有化。
3.这个对象是私有的就必须提供权限为public的方法获取。
示例一:饿汉式
1 | <br> public class Order {<br> private static Order instance = new Order();<br> private Order() {}<br> public static Order getInstance() {<br> return instance;<br> }<br>} |
现在其实就完成了单例模式的代码了。Order类只有一个实例就是instance。但其实单例模式有两种写法。上面这种叫做饿汉式。还有一种叫懒汉式。下面写一下懒汉式。
示例二:懒汉式
1 | <br> public class Order {<br> private static Order instance = null;<br> private Order() {}<br> public static Order getInstance() {<br> if (instance == null) {<br> instance = new Order();<br> }<br> return instance;<br> }<br>}<br> |
2.解决
为解决这个问题,就需要为getInstance方法加锁。阻止线程1调用getInstace方法时,其他线程也调用getInstance。简单说一下加锁,就是限制对共享数据的操作,使用synchronized把对共享数据的操作包起来。使得线程1执行完操作共享数据后,线程2才可以执行(学完多线程更能明白)
加锁方式有五种
1 | <br> // 法一 直接枷锁<br>public static synchronized Order getInstance() { // 这种其实也是Order类对象加锁<br> if (instance == null) {<br> instance = new Order();<br> }<br> return instance;<br>}<br>// 法二<br>public static Order getInstance() {<br> synchronized(Order.class) { // 用Order类对象加锁<br> if (instance == null) {<br> instance = new Order();<br> }<br> return instance;<br> }<br>}<br>// 法三 只是效率比前两者更高<br>public static Order getInstance() {<br> if (instance == null) { // 也是Order类对象加锁<br> synchronized(Order.class) {<br> if (instance == null) {<br> instance = new Order();<br> }<br> }<br> }<br> return instance;<br>}<br>// 法四 静态内部加载<br>public class Order {<br> private static class Order() {<br> private static Order instance = new Order();<br> }<br> private Order(){}<br> public static Order getInsatnce() {<br> return Order.instance;<br> }<br>}<br>// 法五 枚举方法<br>public enum Order {<br> INSTANCE; // INSTANCE就是Order的单例<br> public void doSomething() {<br> // 要做的事情<br> }<br>} |
以上就是 直播软件搭建,Java设计模式单例模式,更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2022-05-16 短视频系统源码,android 真正的全屏沉浸式体验
2022-05-16 手机直播源码,Android Studio用户登录及验证
2022-05-16 视频直播系统源码,react-hooks的页面设置定时器