设计模式:所谓模式即解决某一类问题最行之有效的解决方案,在JAVA中有23种设计模式,分别为:

创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。

结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。

行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、模式、访问者模式。
单例设计模式:保证一个类的实例可以有且只可以有一个,
                        即保证一个类在内存中只存在一个对象,避免其他程序过多建立对象
 
解决思路:
1.先禁止其他程序建立该类对象
2.在本类中自定义一个对象
3.对外提供访问方式

代码实现:
1.将构造函数私有化
2.在类中创建一个本类对象
3.提供一个方法可以获取该对象,
     注:既然不能在其他类创建该类的对象,所以只能在本类中创建本类对象,

即对于对外提供获取该对象的方法调用两种途径:1.对象;2.类名;只能选择用类名调用,
            所以该方法应为static修饰,同理静态方法访问的类内部成员也应为静态。

class Single
{private Single(){}private static Single s = new Single();public static Single getInstance(){return s;}
}
class SingleDemo
{public static void main(String[] args){Single s = Single.getInstance();}
}

---------------------------------------------------------
----------------------------------------------------------
用以下测试程序验证:

class Single
{private int num;public void setNum(int num){   this.num = num;}public int getNum(){return num;}private Single(){}private static Single s = new Single();//先初始化对象,称为饿汉式public static Single getInstance(){return s;}
}
class SingleDemo
{public static void main(String[] args){Single s1 = Single.getInstance();Single s2 = Single.getInstance();s1.setNum(23);System.out.print(s2.getNum());}
}

输出结果为:23,即 由于使用单例模式,所以s1和s2指向同一个堆内存中的对象。

这种设计单例模式在Single类一进内存,就在堆内存中创建对象 ,所以称之为饿汉式

单例另一种形式:

class Single
{private static Single s = null;private Single(){}public static Single getInstance(){if(s == null)s = new Single();return s;}
}

这种单例设计模式在getInstance()方法被调用才进行对象初始化,即对象延时加载,所以称之为懒汉式

懒汉式在多线程中存在的安全问题,即当A程序执行完 if(s == null) 判断后,切换到另一个线程,则调用该方法的B程序此时将创建一个Single对象,

当A程序再次获得CPU的执行权时,不再进行if(s == null) 判断就直接创建该类对象!!

单例模式的第三种形式:

<pre name="code" class="java">class Single
{private static Single s = null;private Single(){}public static Single getInstance(){if(s == null)synchronized(Single.class){if(s==null)s = new Single();}return s;}
}

双重锁形式,加了synchronized关键字,即解决了多线程情况下的安全问题,又由于采用双重判断方式避免了直接将synchronized加在方法名上所导致的低效问题,即public static synchronized Single getInstance()。

小结:实际开发一般用饿汉式,虽然类一加载就创建对象,但是单例模式的设计就是为了保证对象的唯一性,
          也就是说就是需要用到这个类的实例对象。

黑马程序员—单例模式的设计相关推荐

  1. python设计游戏的背景_04_游戏背景 — 黑马程序员《Python入门教程完整版》笔记...

    游戏背景 黑马程序员<Python入门教程完整版>笔记 - 黑马程序员<Python入门教程完整版>笔记 目标背景交替滚动的思路确定 显示游戏背景 01. 背景交替滚动的思路确 ...

  2. 《MySQL数据库原理、设计与应用》课后习题及答案 黑马程序员编著

    <MySQL数据库原理.设计与应用>课后习题及答案 黑马程序员编著 答案有文档形式,但是csdn必须要下载,,需要的人就去那里下载吧.<MySQL数据库原理.设计与应用>课后习 ...

  3. 黑马程序员UI设计学院公开课,10月18日开讲啦!

    揭秘网红照"骗"的那点秘密公开课,重磅来袭! 本期导读: 如今的大众文化圈,已经不再单纯.平民狂欢造就一茬又一茬的网络红人.这是多元的时代使然,不修片不发图,充斥在互联网上的网红的 ...

  4. 黑马程序员,黑马论坛-------单例模式的两种实现(恶汉+懒汉)

    文章来源:黑马程序员,黑马论坛 单列模式的实现主要有两种:饿汉式单例类和懒汉式单例类 1)饿汉式单例类 代码清单1:饿汉式单例类 public class EagerSingleton{ privat ...

  5. 黑马程序员入学Java知识——精华总结

    黑马程序员入学Java知识--精华总结 J2SE部分,Java高新技术部分,7K面试题部分等黑马入学要求的知识点总结! 一.黑马程序员-java概述与基础知识 6 1.何为编程? 6 2.Java语言 ...

  6. [学习笔记]黑马程序员python教程

    文章目录 思维导图 Python基础知识图谱 面向对象 SQL入门和实战 Python高阶技巧 第一阶段 第九章:Python异常.模块与包 1.9.1异常的捕获 1.9.1.1 为什么要捕获异常 1 ...

  7. SSM 框架学习(黑马程序员)

    (Spring+SpringMVC+MyBatis) SSM框架教程 黑马程序员最全SSM框架教程|Spring+SpringMVC+MyBatis全套教程 01. Spring 简介 1.1 Spr ...

  8. python从入门到高阶(基于黑马程序员python教程)

    文章目录 0.文章来源 1."学it就来%s%s员"% (name,"程序员") 2.%s:占位字符串.%d:占位整型.%f:占位浮点型 3.字符串格式化的精度 ...

  9. python实训项目-黑马程序员上海校区Python21期Django项目实训

    黑马程序员上海中心 月薪一万只是起点 关注 晚上十点,一名名Python学生正在酣畅淋漓地撸代码,手指不间断地敲击着键盘,发出机械而清脆的声音. 各个小组在经过为期4天的django项目小组开发,终于 ...

最新文章

  1. 用户态下init进程1的执行
  2. R语言-处理异常值或报错的三个示例
  3. 支付宝的kill-ie
  4. git rm–r folder/file fatal:pathspec did not match any files
  5. C# WinForm 添加Windows Media Player 控件调试出现未能加载文件或程序集Interop.WMPLib,该怎么解决...
  6. python算法与数据结构-希尔排序算法(35)
  7. pmp每日三题(2022年3月1日)
  8. 数据库为啥要使用参数绑定?
  9. 《Java基础学习笔记》JAVA面向对象之封装
  10. Java selenium和python_c#和Java和python设置selenium超时时间
  11. 安装mysql报curses的解决
  12. linux 软件包安装管理
  13. 浅谈御剑web指纹识别-CMS指纹识别
  14. *使用phpspider -- PHP蜘蛛爬虫框架来爬取数据
  15. c语言程序设计小球弹跳,C语言实现弹跳小球
  16. 4.智能快递柜(通信篇-SOCKET)
  17. pixhawk源码下载与编译
  18. 没有计算的推理和基于推理的计算 逻辑与算法之五
  19. 微星GS65 英雄联盟崩溃
  20. tcp/ip的模型与原理

热门文章

  1. Linux学习笔记(一)(服务器环境搭配 常用命令 文件属性)
  2. lol服务器维护 胜率,英雄联盟:服务器当真会强行平衡胜率,玩家连胜之后必定连跪?...
  3. C++中的swap()函数
  4. 创造一切条件让大家“混”
  5. 军工计算机工业主板,6U紧凑军用CPCI工控机主板cPCI-6940系列
  6. MATLAB1770太阳黑子,太阳黑子周期matlab仿真
  7. 求你不要在工作时间刷课了
  8. Vue.js 作者在 VueConf 2019 上海演讲视频
  9. GraphPad Prism软件计算IC50与作图
  10. [珍藏] 易语言老论坛发言排行榜