一.什么是设计模式?

设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误 总结出来的。 对问题行之有效地解决方式,是一种设计思想。java 中设计模式一般有23种

创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,
    建造者模式,原型模式。
    
    结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,
    桥接模式,组合模式,享元模式。
    
    行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、
    责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、
    解释器模式。

二.介绍几种常用的模式以及案例的实现

1.单例设计模式:
    解决问题:保证一个类在内存中的对象是唯一的。
       
    如何保证对象的唯一性?
    1.不允许其他程序用new关键字来创建对象。                                        
    2.在该类中创建一个本类的实例。                                                
    3.定义一个公有的方法,让其他程序可以获取该对象。

   单例模式作用:

  1.控制资源的使用,通过线程同步来控制资源的并发访问;

  2.控制实例产生的数量,达到节约资源的目的。

  3.作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条
    件下,让多个不相关的两个线程或者进程之间实现通信。
  私有化构造方法。 通过new在本类中创建一个本类对象。 定义一个公有的方法,将创建的对象返回。

饿汉式单例类与懒汉式单例类比较 
    
      饿汉式单例类在类被加载时就将自己实例化,它的优点在于无须考虑多线程 ,访问问题,可以确保实例的唯一性;从调用速度和反应时间角度来讲,由于单例对象一开始就得以创建,因此要优于懒汉式单例。但是无论系统在运行时是否需要使用该单例对象,由于在类加载时该对象就需要创建,因此从资源利用效率角度来讲,饿汉式单例不及懒汉式单例,而且在系统加载时由于需要创建饿汉式单例对象,加载时间可能会比较长。 
       懒汉式单例类在第一次使用时创建,无须一直占用系统资源,实现了延迟加 载,但是必须处理好多个线程同时访问的问题,特别是当单例类作为资源控制器,在实例化时必然涉及资源初始化,而资源初始化很有可能耗费大量时间,这意味着出现多线程同时首次引用此类的机率变得较大,需要通过双重检查锁定等机制进行控制,这将导致系统性能受到一定影响。

三.案例代码

单例模式:

class SingleDemo{/*1 不允许其他程序用new关键字来创建对象。2 在该类中创建一个本类的实例。3 定义一个公有的方法,让其他程序可以获取该对象。*/private SingleDemo(){}private static SingleDemo s = null;public static SingleDemo getS(){if(s == null){return new SingleDemo();}return s;}
}
public class SingleTest {public static void main(String[] args) {SingleDemo.getS();}
}

饿汉模式与懒汉模式:

class Single{//饿汉式,当类加载时,对象就加载了。   默认的private Single(){}private static Single s = new Single();public static Single getS() {return s;}
}
class Single2{//懒汉式:类加载进来时没有对象,只有调用了gets()时才会产生对象。private static Single2 s = null;private Single2(){}public static Single2 gets(){if(s == null){s = new Single2();}return s;}
}
public class Test {/*Single s = new Single();Single s1 = Single.getS();*/
}

以上就是关于Java的设计模式的基本介绍。

【Java】Java中的设计模式的介绍以及代码详解相关推荐

  1. Java Web中的EL(表达式语言)详解

     Java Web中的EL(表达式语言)详解 表达式语言(Expression Language)简称EL,它是JSP2.0中引入的一个新内容.通过EL可以简化在JSP开发中对对象的引用,从而规范页面 ...

  2. js 浅拷贝直接赋值_JS中实现浅拷贝和深拷贝的代码详解

    (一)JS中基本类型和引用类型 JavaScript的变量中包含两种类型的值:基本类型值 和 引用类型值,在内存中的表现形式在于:前者是存储在栈中的一些简单的数据段,后者则是保存在堆内存中的一个对象. ...

  3. PX4飞控中利用EKF估计姿态角代码详解

    PX4飞控中利用EKF估计姿态角代码详解 PX4飞控中主要用EKF算法来估计飞行器三轴姿态角,具体c文件在px4\Firmware\src\modules\attitude_estimator_ekf ...

  4. java编程数据溢出问题_Java数据溢出代码详解

    Java数据溢出代码详解 发布时间:2020-10-05 15:08:31 来源:脚本之家 阅读:103 作者:Pony小马 java是一门相对安全的语言,那么数据溢出时它是如何处理的呢? 看一段代码 ...

  5. java rollback_Spring中的@Transactional(rollbackFor = Exception.class)属性详解

    序言 今天我在写代码的时候,看到了.一个注解@Transactional(rollbackFor = Exception.class),今天就和大家分享一下,这个注解的用法: 异常 如下图所示,我们都 ...

  6. 一位深度学习小萌新的学渣笔记(四)GoogLeNet网络介绍及代码详解

    前言 继续学习霹雳大神的神经网络讲解视频 更新不易,希望大家可以去看原视频支持up主霹雳吧啦Wz GoogLeNet网络详解 使用pytorch搭建GoogLeNet网络 本博文记载的是基于Pytor ...

  7. Java程序中Doc(文档)注释详解

    许多人写代码时总不喜欢写注释,每个程序员如此,嘿嘿,我也一样 不过,话说回来,该写还是要写哦!没人会喜欢一个不写注释的程序员,当然,也没有一个喜欢写注释的程序员,今天,我们就来说说Java注释之一-- ...

  8. JAVA程序设计计时器代码_Java中的定时器Timer使用示例代码详解

    一.类概述 Timer是一种定时器工具,用来在一个后台线程计划执行指定任务.它可以计划执行一个任务一次或反复多次. TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务. 二.代码 ...

  9. java excel导出 jxl_Java中用JXL导出Excel代码详解

    jxl是一个韩国人写的java操作excel的工具, 在开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI.其中功能相对POI比较弱一点.但jExcelAPI对中文支 ...

最新文章

  1. Keras学习代码—github官网examples
  2. 网站bin目录下的不可以放配置文件或其他可写文件
  3. linux终端设置-集成说明
  4. NOKIA Update for Windows Phone
  5. LeetCode 461. Hamming Distance
  6. extern C用法详解
  7. RxJS异步编程的简介
  8. Valine+Leancloud搭建评论模块
  9. 用MATLAB解决实际数学问题,利用MATLAB解决高等数学问题.doc
  10. java 单例模式(饿汉模式和懒汉模式)
  11. html5设计基础报告,《网页设计与制作基础》实验报告.doc
  12. 图像风格迁移 CycleGAN原理
  13. excel宏编程 c语言,宏(巨集)
  14. JDK7及早期版本Java HotSpot 虚拟机配置选项
  15. 基于WizFi220的Cosmo WiFi扩展板
  16. iOS开发--微信和支付宝网页支付(过审, 支付宝支付成功可回跳)
  17. linux运行img文件格式,img是什么格式?img文件怎么打开?
  18. oracle column name as sign,Oracle日常性能查看 - ella的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  19. linux系统运维必会
  20. texstudio: 无法启动buildview:Xelate: xelatex.exe -synctex=1 -interacion=nonstopmode

热门文章

  1. Matplotlib 中文字体设置
  2. 存储技术论坛:最高可用级别的同步复制及方案
  3. Redis学习总结(23)——Redis集群化方案对比:Codis、Twemproxy、Redis Cluster
  4. 乌班图mysql8.0安装第一次手工启动_Ubuntu Server 16.04下mysql8.0安装配置图文教程
  5. mysql 季度最后一天,MYSQL中取目前年份的第一天和当前周,月,季度的第一天/最后一天...
  6. mysql 主从同步不一致_为什么mysql会经常出现主从同步不一致的情况
  7. 【转】常用的正则表达式
  8. 8.1 类的一般形式
  9. 《ELK Stack权威指南(第2版)》一3.5 Windows系统日志
  10. Linux Shell 判断块设备节点是否存在