在某些情况下,我们需要再不修改现有对象结构的情况爱,动态的添加或删除,继承在这种情况下可能会导致类爆炸问题,而且修改现有的类可能会影响其他部分的代码。装饰模式提供了一种在运行时动态的为对象添加新功能的方法,通过创建一个装饰类来包装原始类,装饰类具有与原始类相同的接口,它内部包含一个指向原始对象的引用,并且可以根据需要包装额外的功能。这样通过组合不同的装饰类来构建出具有不同功能组合的对象。装饰模式的
在某些情况下,我们需要处理一组对象,这些对象之间具有整体-部分的关系,我们希望能够以一致的方式处理单个对象和对象组合,而不需要对它们进行特殊处理。组合模式的解决方案是将对象组合成树状结构,其中树的节点可以是单个对象或对象组合。这样无论是操作单个对象还是对象组合,都可以使用统一的方式进行操作。组合模式通过定义一个共同的抽象类或接口来表示单个对象和对象组合,从而实现了透明的处理。在组合模式中,通常有两
在软件设计中,有时候你会遇到一个类有多个变化维度(例如抽象和具体的实现)。如果使用集成来处理这些变化,将会导致类层次结构的急剧增加,难以管理和维护。此外继承会将抽象部分和具体部分紧密耦合,不利于独立的进行扩展和变化。桥接模式通过将抽象部分和具体部分分离,使他们可以独立的变化。在桥接模式中,通过创建一个桥接接口(或抽象类),其中包含一个指向具体实现的引用,将抽象部分和具体部分连接起来,这样,抽象部分
当你有两个不兼容的接口,但需要他们能够一起工作时,适配器模式可以解决这个问题,例如,你可能有一个已存在的类库或组件,但其接口与你的代码不匹配,你希望能够无缝衔接的将他们集成在一起。适配器模式的应用可以使得现有的代码和新代码能够无缝协同工作,从而提高了代码的可用性。它允许你将不同系统,库或者组件整合在一起,而不许对现有的代码进行大量修改,然而,适配器模式也可能引入一些复杂性,因为你需要维护适配器类和
在某些情况下,需要确保一个类只有一个实例,并且需要一个全局访问点来访问这个实例。例如,在一个应用程序中,一个配置管理器类需要保持一致的配置数据,以避免不同部分之间的配置冲突。单例模式通过需要确保一个类只能创建一个实例,并提供一个静态方法或者静态属性来访问这个实例。通常,单例类会将自己的构造函数声明为私有,以防止外部代码直接创建实例。通过一个静态方法,单例类可以控制在运行时只能获得同一个实例。单例模
在某些情况下,需要创建对象的副本,但是复制一个对象的成本可能很高,或者希望避免与对象的具体类耦合。例如,当创建对象的过程较为复杂,或者对象包含大量共享的状态时,使用常规的创建方法可能会导致性能下降。原型模式的解决方案是通过复制现有对象来创建新对象,而不是从头开始构建。这允许我们以更高效的方式创建新对象,同时避免了与对象类的直接耦合。核心概念是在原型对象的基础上进行克隆,使得新对象具有与原型相同的初
在某些情况下,一个对象的创建过程非常复杂,涉及多个步骤,每个步骤都可能有不同的实现方式。如果将所有创建逻辑放在一个类中,会导致该类变得庞大且难以维护。此外,如果需要创建不同的变体对象,就需要在该类中添加更多的逻辑,使得代码变得混乱。建造者模式提供了一种将一个复杂对象的构建过程与其表示分离的方法。它将对象的构建过程封装在一个独立的“建造者”类中,由该类负责逐步构建对象。这样,可以根据需要创建不同的建
抽象工厂模式(Avstract Factory)在某些情况下,需要创建一系列相关或相互依赖的对象,这些对象属于一组相关的产品族。同时,系统需要保证这些产品族之间的一致性。如果直接在代码中创建这些对象,会使得代码与具体产品的细节紧密耦合,不利于后续的扩展和维护。抽象工厂模式提供了一个接口,用于创建一系列相关或相互依赖的对象。通过使用抽象工厂接口及其具体实现,可以将对象的创建与客户端代码分离,从而实现
在软件设计中,我们经常遇到需要创建不同类型对象的情况,但是如果直接在代码中实例化对象,会使代码紧密耦合在一起,难以维护和拓展,此外,如果对象的创建方式需要变化,那么就需要再整个代码中进行大量的修改。工厂模式旨在解决这个问题。工厂模式提供了一个创建对象的接口,但是将具体的对象创建延迟到子类中。这样,客户端代码不需要知道要创建的具体对象的类,只需要通过工厂方法来创建对象。这使得客户端代码与具体对象的创
首先明白什么是设计模式,设计不是一门技术,也不是一个代码框架,而是一种思维方式,是在软件设计中反复出现的问题的通用解决方案。旨在帮助软件开发人员解决特定类型的问题,提高代码的可维护性、可扩展性和重用性。设计模式是一种抽象化的思维方式,可以帮助开发人员更好的组织和设计代码结构。他们提供了一种通用的框架,可以解决各种软件在不同应用场景下的设计问题。设计模式不是一成不变的规则,而是根据不同的问题和情境来
按照习俗,先介绍下jenkins,Jenkins,是一个开源的、提供友好操作界面的持续集成(CI)工具,主要用于持续、自动的构建的一些定时执行的任务。Jenkins用Java语言编写,可在Tomcat等流行的容器中运行,也可独立运行。然后是为什么要使用jenkins:第一Jenkin是免费开源的,且拥有庞大的社区,也就意味着不要钱的同时还有丰富的文档可以查看以解决遇到的各种问题,第二是有很多插件可
今天在这里讲如何在docker上运行nignx镜像,并将配置文件和目录挂载到宿主机上,以实现方便统一的管理配置信息。首先第一步需要拉取镜像,我们还是拉取最新的镜像,不需要添加tag版本号,docker pull nginx拉取结束后用docker images 查看是否拉取成功,如图中可以看到nginx的镜像了。docker拉取成功后需要创建文件和文件夹用于运行的时候挂载,mkdir -p /us
很多项目会用到redis作为缓存用到项目中,鉴于刚了解过docker,今天这里用docker运行redis镜像,这样下载,安装运行,或者是使用后的删除都会干净,简单。好了,第一步是先拉取镜像,使用docker pull命令,不加版本号就是默认拉取最新一个版本。docker pull redis如图中,就是已经拉取完成了。第二步用docker images查看镜像是否存在,如下图标红的部
使用docker运行软件或者项目的时候很容易发现一个问题:整个项目都在docker中运行,那么它产生的一些数据也会在docke容器中,那么今后都不能删除这个docker容器了,因为会连带着产生的一些数据全部删除了。不过既然docker这么流行,肯定有方式解决这个问题,那就是将容器外的文件挂载到容器中,其实就是将容器内部的文件地址指向容器外面liunx的文件系统中指定的文件上,这样数据的写入和读取都
上一节已经介绍怎么安装docker,这节讲如何获取镜像和运行镜像。获取镜像前,首先看下docker是否安装好并运行,使用命令docker -v,如果出现版本号则说明安装并运行成功,如图确认docker安装完成后就可以从中央仓库拉取镜像了,命令是docker pull ,比如想拉取redis,那么命令就是docker pull redis,不佳版本号的话默认就是拉取最新版本,也可以通过添加版本号选择
Docker是一个被广泛使用的开源容器引擎,是一种操作系统级别的虚拟化技术,它以一种特殊进程的方式运行于宿主机上,它依赖于liunx内核特性:namespace(名字空间进行资源的隔离)和cgroups(限制、记录任务组所使用的物理资源),它也可以对应用程序进行打包。docker容器技术目前在开发中应用很广泛,下面我们就来介绍下docker的具体使用方法和作用,在以前或者现在很多未使用docker
看完Mybatis的基本操作,我们来聊下Mybaits的底层实现原理:MyBatis 是一个持久层框架,它的底层实现原理主要涉及 SQL 解析、参数映射、SQL 执行和结果映射等方面。下面是 MyBatis 的基本工作原理:配置文件加载:MyBatis 的配置文件(通常为 mybatis-config.xml)被加载,并解析成内部的配置对象。映射文件加载:MyBatis 根据配置文件中的
之前对mybatis的<select>标签以及其他相关标签做了讲解,很多标签也是可以拿到增删改的标签中来用的,下面先说下<insert>标签的用法:<insert>标签顾名思义就是插入语句,用于将数据插入到数据库中,一般插入标签没有返回值,传入一个实体对象的数据,一般不对插入的数据做判断,因为是新的一笔数据,即使是null值也可以插入,一些业务逻辑的判断应该放在
上节有介绍Mybaits传入参数不同类型的时候,对应的处理方法,这节要说下处理方法时候还会用到的另外几个标签,比如<where> ,<if>等。我们首先说下<if>标签,看名字就知道是用来做判断的,放传入的参数为null或者为空字符串时,我们不希望它3参与筛选,我们可以用<if>标签过滤掉值为null或者是空字符串的字段。例如:<select
系统在做查询时,多数情况会需要做条件筛选,也就是要传入参数,用参数作为条件去查询,因此处理传入参数就成了一个问题,传入的参数可能是单个基础数据类型的参数,也可能是集合或者是对象等,如果传入的参数是基础数据类型,可以直接拼接上,例如:当传入参数为String类型的name时,直接拼接到sql语句上即可,这里要注意区分#{}和${},#是作为占位符预编译的,简单的说,传入的内容会加上单引号只会作为一个
上文讲了关于<select>标签的用法和例子,但是很多时候这些并不能完全满足需求,因为很多时候关系型数据库是存在表关联的情况,比如一个用户表中数据对应一条用户详细信息数据,这样就存在表关联的情况,用户表的其中一个字段是用户详细信息的数据类型,亦或者一个用户有多种角色,那么用户表中就存在roles这样一个对象集合的数据类型,这是一个简单的<select>标签实现不了的,因此要
mybaits的select标签用法
这节讲用cesium在地球上绘制一个透明的光圈,常用于标识一片区域等。具体步骤是现在场景中放置一个圆形的几何体,设置圆形几何体的中心点在地球上的经纬度和半径。然后创建几何体实例,引入圆形,并设置颜色,最后设置一些几何体的属性,并加载到场景中,代码如下: <!DOCTYPE html> <html lang="en"> <head> <
Cesium提供方法自动生成建筑物3D模型,也就是根据地面上的图片,建筑物的周围轮廓生成一个模拟的3D建筑物的轮廓,并放置在地球的建筑物位置,相关注释在代码中已经体现了。下面通过代码演示整个过程: <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&qu
Cesium制作鹰眼效果就是在右下角放一个缩略的地球,转动大的地球的同时,也转动右下角的小地球,以保证随时可以看到一个地球的局部图,实际原理是在右下角放置一个div,也同时初始化为一个cesium的模型。在转动大的地球时,出发事件将转动的角度,缩放的大小也同步到右下角小的地球上,现实两个球的联动,下面是相关代码,想看效果可以将代码复制到html文件中,修改为自己的token,用浏览器打开查看效果。
将博客搬至CSDN
很多时候需要实现一个镜头飞入目标的动画效果,也就是刚进入页面的时候从默认位置旋转地球到目标点,并逐渐放近镜头的动画,Cesium提供一个fly的动画效果,设置目标点的经纬度和高度,以及设置对准目标点时镜头的角度,这里根据上一篇的内容将镜头逐渐拉到中国地图中首都北京的位置,并设置动画时长为5秒,代码如下: <!DOCTYPE html> <html lang="en&qu
geojson数据常用于绘制一个区域范围,在之前的百度echarts中绘制区域的时候经常会用到,Cesium中同样可以用,通过将geojson的文件数据导入到Cesium中,具体中国每个行政区的geojson文件可以在网站https://datav.aliyun.com/portal/school/atlas/area_selector中制作。实现在cesium的地球中描绘出具体的行政区域,并可以
之前有讲过在Cesium的地球上放置一个正方体,这节在正方体上添加贴图,使他看起来更美观一点,贴图可以用哪个任何的图片,我这里就随便找一张放上去,主要演示实现效果和用法。步骤还是和之前一样,先在地球上放置一个正方体,然后再通过改变正方体的材质,添加材质的图片为选中的图片,最后将配置好的正方体加载到场景中。具体的步骤和代码如下: <!DOCTYPE html> <html lang
这节讲下如何修改Cesium的纹理贴图,可以修改为图片或者视频,因为默认的地球贴图其实类似百度地图,用一张张的瓦片贴上去的,在鼠标给地球放大的同时会切换更加精细的图片,这里修改后的贴图可能没有放大变得精细的功能,就只是修改一个球面的外部贴图,详细的实现方式和步骤会在代码的中提供,这里放上代码: <!DOCTYPE html> <html lang="en"&g
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号