- 博客(108)
- 资源 (1)
- 收藏
- 关注
原创 备忘录设计模式
备忘录设计模式一、备忘录设计模式1、介绍备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存状态备忘录对象主要用来记录一个对象的某种状态或者某些数据,当要回退时,可以从备忘录对象离获取原来的数据进行恢复操作备忘录模式属于行为型模式2、UMLOrginator:对象(需要保存状态的对象)Memento:备忘录对象,负责保存Orginator内部状态的Caretaker:守护者对象,负责保存多个备忘录对象,使用集合
2022-04-20 15:26:27
497
原创 中介者设计模式
中介者设计模式一、中介者设计模式1、介绍中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互中介者模式属于行为型模式,使代码易于维护比如MVC模式,C(controller控制器)是M(Model模型)和V(View视图)的中介者,在前后端交互起到中间人的作用2、UMLMediator:抽象中介者,定义了同事对象到中介者对象的接口ConcreteMediator:具体的中介者对象,实现了抽象方法
2022-04-20 15:04:43
888
原创 访问者设计模式
访问者设计模式一、访问者设计模式1、介绍访问者模式:封装一些作用于某种数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用与这些元素的新的操作。主要将数据结构与数据操作分离,解决数据结构和操作耦合性问题访问者模式的基本工作原理是:在被访问的类里面加一个对外提供接待访问者的接口访问者模式主要应用场景是:需要对一个对象结构中的对象进行很多不同操作(这些操作彼此没有关联),同时需要避免这些操作“污染”这些对象的类,可以选用访问者模式解决。2、UMLVisitor:抽象访问者,
2022-04-20 14:36:17
980
原创 命令设计模式
命令设计模式一、命令设计模式1、介绍在软件设计中,我们经常向某些对象发送请求,但是不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可。遇到这种情况可以使用命令模式来设计命令模式使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系跟家灵活,实现解耦。在命令模式中,会将一个请求封装为一个对象,以便使用不同参数来表示不同的请求,同时命令模式也支持可撤销的操作2、原理类图Invoker:调用者角色Receiver:接收者角色,
2022-04-20 11:15:06
549
原创 观察者设计模式
观察者设计模式一、观察者设计模式1、介绍观察者模式:对象之间多对一依赖的一种设计方案,被依赖的对象Subject,依赖的对象为Observer,Subject通知Observer变化。观察者模式类图:角色: Subject:表示观察对象,该角色定义了注册观察者和删除观察者的方法。它还声明了”获取现在的状态“的方法。 ConcreteSubject:表示具体的观察者对象。当自身状态发生变化,它会通知所有已经注册的Observer角色 Observer:表示观察者对象,负责接收来自Sub
2022-04-19 23:21:35
246
原创 模板设计模式
模板方法设计模式一、模板方法设计模式1、介绍(1)模板方法设计模式(Template Method Pattern),也叫模板模式(Template Pattern)。在一个抽象类公开定义了执行它的方法模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。(2)模板方法设计模式就是定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤。(3)模板方法设计模式属于行为型模式。2、UML抽象类A:类中实现了模板
2022-04-15 13:56:19
1977
原创 代理设计模式
代理设计模式一、代理设计模式1、介绍(1)代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象。这样做的好处为可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能(2)被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象(3)代理模式有三种不同的形式,主要有三种静态代理,动态代理(JDK代理、接口代理),Cglib代理(可以在内存动态的创建对象,而不需要实现接口)2、UML二、静态代理1、介绍静态代理:被代理对象与代理对象需要
2022-04-13 11:17:31
1843
原创 享元设计模式
享元设计模式一、享元设计模式1、介绍(1)享元模式(Flyweight Pattem)也叫蝇量模式:运用共享技术有效地支持大量细粒度的对象(2)常用于系统底层开发,解决系统的性能问题。例如:数据库连接池,里面都是创建好的连接对象,在这些连接对象中有我们需要的则直接拿来用,避免重新创建,如果没有我们需要的,则创建一个(3)享元模式能够解决重复对象的内存浪费问题,当系统中有大量相似对象,需要缓存池时,不需要总是创建新对象,可以充缓冲池里拿。这样可以降低系统内存,同时提高效率(4)享元模式经典应用场景
2022-04-13 10:09:20
347
原创 外观设计模式
外观设计模式一、外观设计模式1、介绍外观模式(Facade),也叫“过程模式”。外观模式定义了一个高层接口,用以屏蔽内部子系统的细节,使得客户端只需跟这个接口发生调用,而无需关心这个子系统的内部细节。简化了客户端操作。2、UML原理类图外观类(Facade):为客户端提供统一的调用接口,外观类知道哪些子系统负责处理请求,从而将客户端的请求代理给适当子系统对象客户端(调用者):外观接口的调用者子系统集合:指模块或者子系统,处理Facade对象指派的任务,功能的实际提供者3、外观模式的
2022-04-06 16:18:45
1362
原创 组合设计模式
组合设计模式一、组合设计模式1、介绍组合模式(Composite Pattern),又叫部分整体模式,它创建了对象组的树形结构。将对象组合成树状结构以表示“整体-部分”的层次关系组合模式依据树形结构来组合对象,用来表示部分以及整体层次组合模式属于结构型模式组合模式使得用户对单个对象和组合对象的访问具有一致性。即:组合能让客户以一致的方式处理个别对象以及组合对象2、原理UML类图Component:这是组合中对象声明接口,定义或实现公共有的接口默认行为,用于访问和管理Component
2022-04-06 13:36:15
1531
1
原创 装饰者设计模式
装饰者模式1、介绍装饰者模式:动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性。装饰者模式也体现了开闭原则(OPC)2、UML图解:主体是饮料(Drink)装饰者是调味品(SeasoningDecorator)就像打包快递一样(主体是邮寄的物件,装饰品是打包的纸箱),我们将主体聚合到装饰者中Americano/DeCaf/Espresson是具体的主体Chocolate/Soy/Milk是具体的装饰者调用:3、代码/** * 饮料 */public ab
2022-04-02 16:51:45
646
原创 桥接设计模式
一、桥接模式1、介绍桥接模式是一种结构型设计模式桥接模式是将实现和抽象放在两个不同的类层次中,使两个层次可以独立改变桥接模式是基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象和行为实现分离开来,从而可以保持各个部分的独立性以及应对它们的功能扩展2、图解UML图说明:Client类:桥接模式的调用者抽象类(Phone):聚合了Brand接口。在这里是桥接类的角色AlmostPhone/FoldPhone/SlidePhone继承了抽象
2022-04-02 11:40:08
798
原创 建造者模式
建造者模式一、基本介绍建造者模式又名生成这模式,是一种对象构建模式。建造者模式用于将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造不同表现(属性)得对象建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。 建造者模式中的4个角色:Product(产品角色):一个具体的产品对象Builder(抽象建造者):创建一个Product对象。约定规范构建和装配产品的各个部件(方法)
2022-04-01 13:25:38
191
原创 适配器模式
适配器模式零:适配器1、介绍适配器模式属于结构性设计模式适配器模式用于将某个类的接口转换成客户端期望的另一个接口表示。主要目的是兼容性,不修改代码的基础上,让原本因接口不匹配不能一起工作的两个类可以协同工作。2、工作原理适配器模式:将一个类的接口转换成另一种接口,让原本接口不兼容的类可以兼容从用户角度看不到被是陪着,是解耦的用户调用适配器转化出来的目标接口方法,适配器在调用被适配者的相关接口3、适配器分类类适配器:以类给到,适配器继承被适配类对象适配器:以对象
2022-03-31 23:37:10
483
原创 原型设计模式
原型设计模式一、原型介绍原型模式是创建型设计模式。通过原型实例指定创建对象的种类,并且通过拷贝原型,创建新的对象。原型类A,原型实例A1,通过拷贝原型实例A1,创建多个A的原型实列A2,A3…类似于西游记孙悟空拔出猴毛,变出与其要一模一样的孙悟空。我有类A,我new 了一个实例a1。当我想要再创建跟a1一样的实例时,我们最简单的做法就是继续new一个实例a2,然后将a1中的属性获取并赋值给a2,这样我们就得到了一个与a1一样的实例a2。但是这样的做法如果遇到new的对象比较复杂时,效率很低。而
2022-03-31 00:03:32
652
原创 工厂设计模式
工厂模式一、普通写法1、UML1、代码案例/** * @Author: dashu * @Description: 饺子 * @Date: 23:18 * @Version: 1.0 */public abstract class Dumplings { private String stuffing; /** * 准备食材 */ public abstract void ingredient(); /** * 包饺子
2022-03-30 22:26:29
747
原创 UML类关系
UML:类关系一、依赖1、介绍A类使用到了B类,那就可以描述为A依赖于B。如果A类没有B类,则无法通过编译2、UML3、代码/** * 人 */public class Person { /** * 吃 */ public void eat(Food food){ System.out.printf("人吃"+food.createFood()); }}/** * 食物 */public class Food
2022-03-30 14:58:10
444
原创 设计模式七大设计原则
设计模式:七大设计原则设计模式是为了让程序具有更好的代码重用性(相同功能的代码,不用多次编写)可读性(编程规范性,便于其他程序员的阅读和理解)可扩展性(当需要增加新的功能时,非常的方便,称为可维护)可靠性(当我们增加新的功能后,对原来的功能没有影响)使程序呈现高内聚,低耦合的特性。一、单一职责1、基本介绍在Java中,对一个类来说,一个类应该只负责一项职责。如类A负责两个不同职责:职责1,职责2。当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A22、
2022-03-30 12:51:02
663
原创 单例设计模式
单例零、单例设计模式单例设计模式:采取一定的方法保证整个软件系统中,对某个类只能存在一个对象实例;并且该类只提供一个取得其对象实例的静态方法。1、构造器私有化(防止new)2、向外暴露一个静态的公共方法一、饿汉式:成员变量初始化1、代码/** * @Author: dashu * @Description: 单例(饿汉式:成员变量初始化) * @Version: 1.0 */public class Singleton { private final static Si
2022-03-24 00:29:24
578
原创 OpenLayers 3 内置交互
OpenLayers 3 交互一、OpenLayers 3 内置交互类OpenLayers 3提供了最基本的地图放大,缩小,平移等功能,以满足用户浏览地图的需要。 这些功能都是内置的,实现类都放在包ol.interaction下面,可以通过官网API查询到。交互类描述旋转ol.interaction.DragRotate按住alt+shift键,用鼠标左键拖动地图,就能让地图旋转ol.interaction.PinchRotate两个手指旋转地图,针对触摸屏
2022-02-15 13:36:26
726
原创 Activiti7学习_2
Activiti7_20、观看提醒Activiti基础案例的测试方法基于我上一个篇章“Activiti 7学习_1”部署环境运行的Activiti 7学习_1路径一、Activiti的25张表表名介绍act_evt_log流程引擎通用日志表act_procdef_info流程定义的动态变更信息ACT_GE_*:全局通用数据及设置(general),各种情况都使用的数据。表名介绍act_ge_bytearray二进制表,存储通用的
2022-01-25 23:21:02
610
1
原创 OpenLayers 3 事件应用
OpenLayers 3 事件应用常用鼠标事件 地图鼠标左键单击事件 对应的类为ol.Map,事件名为singleclick。 地图鼠标左键双击事件 对应的类为ol.Map,事件名为dblclick。 地图鼠标点击事件 对应的类为ol.Map,事件名为click。 地图鼠标移动事件 对应的类为ol.Map,事件名为pointermove。 地图鼠标拖拽事件 对应的类为ol.Map,事件名为pointerdrag。
2022-01-25 14:29:03
2408
原创 Activiti 7学习_1
Activiti7一、Activiti介绍 Alfresco软件在2010年5月17日宣布Activiti业务流程管理(BPM)开源项目的正式启动,其首席架构师由业务流程管理BPM的专家 Tom Baeyens担任,Tom Baeyens就是原来jbpm的架构师,而jbpm是一个非常有名的工作流引擎,当然activiti也是一个工作流引擎。Activiti是一个工作流引擎, activiti可以将业务系统中复杂的业务流程抽取出来,使用专门的建模语言BPMN2.0进行定义,业务流程按照预先定义的流程
2022-01-24 23:12:39
681
1
原创 工作流+BPM+BPMN
工作流+BPM+BPMN一、工作流1、工作流(Workflow)工作流(Workflow),指“业务过程的部分或整体在计算机应用环境下的自动化”。是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。在计算机中,工作流属于计算机支持的协同工作(CSCW)的一部分。后者是普遍地研究一个群体如何在计算机的帮助下实现协同工作的。Georgakopoulos给出的工作流定义是:工作流是将一组任务组织起来以完成某个经营过程;定义了任务的触发顺序和触发条件,每个任务可以由一个或多个软件系统完成,也可以由一个或
2022-01-24 21:05:41
2896
原创 AOP学习
AOP Demo一、AOP注解 /** * 标注于配置类上,开启基于注解的AOP模式 */ @EnableAspectJAutoProxy /** * 标注在类上,告诉Spring这个类是一个AOP类 */ @Aspect /** * 切入点 */ @Pointcut /** * 前置通知:标注在方法上,在目标方法运行前运行 */ @Before /** * 后置通知:标注在方法上,在目标
2022-01-20 20:55:48
383
原创 Spring自动装配注解
Spring自动装配注解注解来源特点与区别备注@AutowiredSpring定义Spring提供自动装配注解@Autowired详解@Resource(JSR250)java注解规范与@Autowired功能一样。但默认按照组件名称进行装配,不支持@Primary和@Qualifier搭配使用@Resource(name = “person”) Person person;@Inject(JSR330)java注解规范与@Autowired功能一样。支
2021-12-25 01:15:07
682
原创 Spring注解@Autowired
Spring注解@Autowired一、@Autowired注解作用1、@Autowired注解@Autowired是Spring对组件自动装配的一种方式。常用于在一个组件中引入其他组件。//引入Person组件@AutowiredPerson person;自动装配:sprng通过依赖注入(DI),完成IOC容器中各个组件依赖的关系赋值2、@Autowired自动装配详解(1) @Autowired自动装配,默认优先按照类型取IOC容器中寻找对应的组件annotationConfig
2021-12-25 00:03:06
8979
原创 OpenLayers 3地图添加图标
OpenLayers 3地图添加图标一、overlay方式在地图添加图标1、项目结构2、map.html<!Doctype html><html xmlns='http://www.w3.org/1999/xhtml'><head> <meta http-equiv='Content-Type' content='text/html;charset=utf-8'> <meta http-equiv='X-UA-Compat
2021-12-24 13:39:58
3520
3
原创 Spring 注解 @Value和@PropertySource
Spring 注解 @Value和@PropertySource一、@Value和@PropertySource1、@Value@Value注解:为属性赋值赋值方式:基本数值SpEl表达式 #{}${},读取配置文件[xxx.properties]中的值,配合注解@PropertySource使用@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TY
2021-12-23 00:22:19
831
原创 Spring Bean的生命周期管理
Spring Bean的生命周期管理一、Spring Bean的生命周期通过以下方式来指定Bean的初始化和销毁方法,当Bean为单例时,Bean归Spring容器管理,Spring容器关闭,就会调用Bean的销毁方法当Bean为多例时,Bean不归Spring容器管理,Spring容器关闭,不会调用Bean的销毁方法二、通过@Bean的参数(initMethod ,destroyMethod)指定Bean的初始化和销毁方法1、项目结构2、Personpublic class Pers
2021-12-22 23:16:28
484
原创 Java SSL通信Demo
Java SSL通信Demo一、数字证书创建在SSL通信协议中,服务端必须有一个数字证书,当客户端连接到服务端时,会得到这个证书,然后客户端会判断这个证书是否是可信的,如果是,则交换信道加密密钥,进行通信。如果不信任这个证书,则连接失败。1、keytoolJDK自带keytool工具命令案列:keytool -genkey -alias demo -keyalg RSA -keysize 1024 -validity 365 -keysto
2021-12-22 16:49:32
973
原创 OpenLayers 3加载矢量地图源
OpenLayers 3加载矢量地图源一、矢量地图矢量图使用直线和曲线来描述图形,这些图形的元素是一些点、线、矩形、多边形、圆和弧线等等,它们都是通过数学公式计算获得的。由于矢量图形可通过公式计算获得,所以矢量图形文件体积一般较小。矢量图形最大的优点是无论放大、缩小或旋转等不会失真。在地图中存在着大量的应用,是地图数据中非常重要的组成部分。为了便于存储,传递,使用,矢量地图会按照一定的格式来表达,比如常见的GeoJSON,TopoJSON,GML,KML,ShapeFile等等。 除了最后一个Shap
2021-12-22 14:48:11
1950
原创 Spring 接口FactoryBean
Spring 提供的FactoryBean一、FactoryBean接口FactoryBean的实现类,用于向容器中注册Bean二、FactoryBean案例1、项目结构2、Persionpublic class Persion {}3、Bean注册配置类BeanConfigimport org.springframework.context.annotation.*;/** * @Configuration 注解:告诉Spring这是一个配置类 * * 配置类 == 配
2021-12-22 00:20:27
333
原创 Spring注解@Import
Spring注解@Import一、@Import注解的作用1、注解方式注册Bean到容器的几种方式 (1)包扫描(@ComponentScan)+组件标注注解(@Controller、@Service、@Repository、@Component),常用于将我们自己写的组件注册到容器(2)注解@Bean,常用于将我们导入第三方包里面的组件注册到容器(3)@Import,快速给容器导入一个组件2、@Import注解@Import用于给容器快速的导入一个组件,标注于类上注解@Import的参数
2021-12-21 23:43:17
733
原创 Spring注解@Conditional
Spring注解@Conditional一、@Conditional注解作用1、作用注解@Conditional用于Bean向容器的注册。注解可标注在类和方法上。使标注的类或方法(标有注解@Bean)按照一定条件进行判断,满足条件才给容器注册此Bean注解@Conditional的参数为一个数组,数组中的元素为实现了接口Condition的实例2、@Conditional@Target({ElementType.TYPE, ElementType.METHOD})@Retention(Rete
2021-12-21 23:39:49
524
原创 OpenLayers 3的Layer和Source
Layer和Source一、Map、Layer和Source图层Layer与地图源Source是一对一的关系。当创建了一个图层Layer,相应的需要给图层添加地图源Source,然后将图层Layer添加到地图Map上,就可以得到我们想要的地图了。二、地图源Source地图源Source分类:分类描述ol.source.Tile瓦片数据源,现在网页地图服务中,绝大多数都是使用的瓦片地图ol.source.Image图片地图源,不像瓦片那样很多张图,从而无需切片,也
2021-12-21 13:35:32
1448
1
原创 Spring注解@Lazy
Spring注解@Lazy一、@Lazy注解1、@Lazy注解作用lazy 翻译过来是"懒惰的"@Lazy(懒加载):该注解用于惰性加载初始化标注的类、方法和参数。在Spring中常用于单实例Bean对象的创建和使用;单实例Bean懒加载:容器启动后不创建对象,而是在第一次获取Bean创建对象时,初始化。2、@Lazy可标注在类、方法、构造方法、参数、字段上@Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTR
2021-12-20 23:22:08
4054
原创 Spring注解@Scope
Spring注解@Scope一、@Scope注解1、@Scope注解作用@Scope注解用于设置实例的作用域。默认值是单实例,即当IOC容器启动后就调用该方法创建对象放到IOC容器中,以后每次获取就是直接从容器中获取。2、@Socpe注解的值 多实例:IOC容器启动并不会调用方法创建对象放在容器中。每次获取的时候才会调用方法创建对象 @see ConfigurableBeanFactory#SCOPE_PROTOTYPE -> prototype 单实例(默认值):I
2021-12-17 01:36:18
4346
2
原创 链表实现栈
链表实现栈一、项目结构二、链表1、节点Nodepublic class Node { private int n; private Node next; public Node(int n) { this.n = n; } public int getN() { return n; } public void setN(int n) { this.n = n; }
2021-12-16 14:03:58
780
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人