当前位置: 首页 > news >正文

网站开发的实训周的实训过程专门做广东11选5的网站

网站开发的实训周的实训过程,专门做广东11选5的网站,wordpress传入视屏黑屏,信息图表设计网站为什么要使用单例 1、表示全局唯一 如果有些数据在系统中应该且只能保存一份#xff0c;那就应该设计为单例类。 如#xff1a;配置类#xff1a;在系统中#xff0c;我们只有一个配置文件#xff0c;当配置文件被加载到内存之后#xff0c;应该被映射为一个唯一的【配…为什么要使用单例 1、表示全局唯一 如果有些数据在系统中应该且只能保存一份那就应该设计为单例类。 如配置类在系统中我们只有一个配置文件当配置文件被加载到内存之后应该被映射为一个唯一的【配置实例】此时就可以使用单例当然也可以不用。全局计数器我们使用一个全局的计数器进行数据统计、生成全局递增ID等功能。若计数器不唯一很有可能产生统计无效ID重复等。 2、处理资源访问冲突 如果让我们设计一个日志输出的功能 多个logger实例在多个线程中同时操作同一个文件就可能产生相互覆盖的问题。因为tomcat处理每一个请求都会使用一个新的线程暂且不考虑多路复用。此时日志文件就成了一个共享资源但凡是多线程访问共享资源我们都要考虑并发修改产生的问题。 源码应用 事实上我们在JDK或者其他的通用框架中很少能看到标准的单例设计模式这也就意味着他确实很经典但严格的单例设计确实有它的问题和局限性我们先看看在源码中的一些案例。 1、jdk的中的单例 jdk中有一个类的实现是一个标准单例模式-Runtime类该类封装了运行时的环境。每个 Java 应用程序都有一个 Runtime 类实例使应用程序能够与其运行的环境相连接。 一般不能实例化一个Runtime对象应用程序也不能创建自己的 Runtime 类实例但可以通过getRuntime 方法获取当前Runtime运行时对象的引用。 public class Runtime {// 典型的饿汉式private static final Runtime currentRuntime new Runtime();private static Version version;public static Runtime getRuntime() {return currentRuntime;}/** Dont let anyone else instantiate this class */private Runtime() {}public void exit(int status) {SuppressWarnings(removal)SecurityManager security System.getSecurityManager();if (security ! null) {security.checkExit(status);}Shutdown.exit(status);}public Process exec(String command) throws IOException {return exec(command, null, null);}public native long freeMemory();public native long maxMemory();public native void gc();}单例存在的问题 尽管单例是一个很经典的设计模式但在实际的开发中我们也很少按照严格的定义去使用它以上的知识大多是为了理解和面试而使用和学习有些人甚至认为单例是一种反模式anti-pattern压根就不推荐使用。大部分情况下我们在项目中使用单例**都是用它来表示一些全局唯一类比如配置信息类、连接池类、ID 生成器类。**单例模式书写简洁、使用方便在代码中我们不需要创建对象。但是这种使用方法有点类似硬编码hard code会带来诸多问题所以我们一般会使用spring的单例容器作为替代方案。那单例究竟存在哪些 问题呢 1、无法支持面向对象编程 我们知道OOP 的三大特性是封装、继承、多态。单例将构造私有化直接导致的结果就是他无法成为其他类的父类这就相当于直接放弃了继承和多态的特性也就相当于损失了可以应对未来需求变化的扩展性以后一旦有扩展需求比如写一个 类似的具有绝大部分相同功能的单例我们不得不新建一个十分【雷同】的单例。 2、极难的横向扩展 我们知道单例类只能有一个对象实例。如果未来某一天一个实例已经无法满足我们的需求我们需要创建一个或者更多个实例时就必须对源代码进行修改无法友好扩展。 在系统设计初期我们觉得系统中只应该有一个数据库连接池这样能方便我们控制对数据库连接资源的消耗。所以我们把数据库连接池类设计成了单例类。但之后我们发现系统中有些 SQL 语句运行得非常慢。这些 SQL 语句在执行的时候长时间占用数据库连接资源导致其他 SQL 请求无法响应。为了解决这个问题我们希望将慢 SQL 与其他 SQL 隔离开来执行。为了实现这样的目的我们可以在系统中创建两个数据库连接池慢 SQL 独享一个数据库连接池其他 SQL 独享另外一个数据库连接池这样就能避免慢 SQL 影响到其他 SQL 的执行。如果我们将数据库连接池设计成单例类显然就无法适应这样的需求变更也就是说单例类在某些情况下会影响代码的扩展性、灵活性。所以数据库连接池、线程池这类的资源池最好还是不要设计成单例类。实际上一些开源的数据库连接池、线程池也确实没有设计成单例类。 不同作用范围的单例 首先我们重新看一下单例的定义“一个类只允许创建唯一一个对象或者实例那这个类就是一个单例类这种设计模式就叫作单例设计模式简称单例模式。” 定义中提到“一个类只允许创建唯一一个对象”。那对象的唯一性的作用范围是什么呢在标准的单例设计模式中其单例是进程唯一的也就意味着一个项目启动在其整个运行环境中只能有一个实例。 事实上在实际的工作当中我们能够看到极多【只有一个实例的情况】但是大多并不是标准的单例设计模式如 1、使用ThreadLocal实现的线程级别的单一实例。 2、使用spring实现的容器级别的单一是实例。 3、使用分布式锁实现的集群状态的唯一实例。 以上的情况都不是标准的单例设计模式但我们可以将其看做单例设计模式的扩展我们以前两种情况为例进行介绍。 容器范围的单例 有的时候我们将单例的作用范围由进程切换到一个容器可能会更加方便我们进行单例对象的管理。这也是spring作为java生态大哥大核心思想。spring通过提供一个单例容器来确保一个实例在容器级别单例并且可以在容器启动时完成初始化他的优势如下 1、所有的bean以单例形式存在于容器中避免大量的对象被创建造成jvm内存抖 动严重频繁gc。 2、程序启动时初始化单例bean满足fast-fail将所有构建过程的异常暴露在启 动时而非运行时更加安全。 3、缓存了所有单例bean启动的过程相当于预热的过程运行时不必进行对象创 建效率更高。 4、容器管理bean的生命周期结合依赖注入使得解耦更加彻底、扩展性无敌。 详解Java实现单例模式(面试题)懒汉式饿汉式 详解Java实现单例模式(面试题)懒汉式饿汉式
http://www.w-s-a.com/news/892724/

相关文章:

  • 外贸网站模板aspnet网站开发 视频
  • 上海植物租赁做网站南浔网站建设
  • 怎么做学校网站做兼职工作上哪个网站招聘
  • 软件下载网站哪个比较好杭州开发小程序
  • 做网站都用什么技术学做名片的网站
  • 备案网站忘记密码乐装网
  • 电商扶贫网站建设淄博网站建设小程序
  • 网站群建设代理丰城网站建设公司
  • 青岛网站建设服务器wordpress迁移跳转原网站
  • 泰安网站建设哪里有公司如何注册网站
  • 做网站开专票税钱是多少个点上海市有哪些公司
  • 寿县有做网站开发的吗宁波网站建设方式
  • 网站建设和网站推广服务器怎么发布网站
  • 比较好的摄影网站雅安市政建设公司网站
  • 网站与微信区别wordpress 站内信
  • 宁夏网站开发设计说明书源码下载脚本之家
  • 邱县做网站百度搜索排名机制
  • 运城个人网站建设智慧团建系统官方网站登录
  • 公司营业执照可以做几个网站一家专门做母婴的网站
  • 网站建设商标属于哪个类别搜狗seo快速排名公司
  • 织梦做商城网站企业网络建站
  • 网站后期维护都有什么wordpress首页加图片
  • 展会网站怎么做网页设计与制作教程版徐洪亮课后答案
  • 石景山网站建设设计公司建设网站怎么建立服务器
  • 本地生活服务平台app网站关键词优化原理
  • 建网站的公司叫什么重庆论坛建站模板
  • 湖北网站制作公司银川网站建设哪家不错
  • 网站后台演示地址服装网站建设公司推荐
  • 湖北钟祥建设局网站旅游哪个网站最好
  • 浙江建设工程信息网站辽宁建设工程信息网场内业绩什么意思