自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

coding is an art

联系邮箱:xxliao100@163.com

  • 博客(65)
  • 收藏
  • 关注

原创 设计模式(二十二)行为型模式---责任链模式(chain responsibility)

责任链模式(chain responsibility)是为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者,通过前一对象记住其下一个对象的引用,而连成一条链,当有请求发生时候,可将请求沿着这一条链传递,直到有对象处理它为止。

2024-06-03 00:01:49 916 1

原创 设计模式(二十一)行为型模式---策略模式(strategy)

策略模式(strategy pattern)是定义一些算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化,不会影响使用算法的客户。

2024-06-03 00:01:34 291

原创 设计模式(二十)行为型模式---状态模式(state)

状态模式(state pattern)主要用于解决对象在多种状态转换时候,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换。

2024-06-03 00:01:22 541

原创 设计模式(十九)行为型模式---解释器模式(interpreter)

解释器模式(interpreter pattern)是给定一个语言表达式,定义它的文法表示,并定义一个解释器,解释器使用该标识来解释语言中的句子。例如:a+b+c=d,这种就是一种”语言“的句子。抽象语法树(AbstractSyntaxTree):是源代码语法结构的一种抽象表示,它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。例如:1+2+3+4-5的语法树。

2024-06-03 00:01:07 897

原创 设计模式(十八)行为型模式---备忘录模式(memento)

备忘录模式(memento pattern)又叫快照模式,在不破坏封装性的前提下,捕捉一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象回复到原先保存的对象。

2024-06-03 00:00:52 390

原创 设计模式(十七)行为型模式---中介者模式(mediator)

中介者模式(mediator pattern)又叫调停模式,定义一个中介角色来封装一系列对象之间的交互,使原有对象的耦合松散,且可以独立地改变它们之间地交互。优点:1.中介者模式 将 多个同事对象之间的交互封装到中介者中,松了同事对象之间的耦合。2.交互集中到了中介者集中管理。

2024-06-03 00:00:32 346

原创 设计模式(十六)行为型模式---观察者模式(observer)

观察者模式(observer pattern又称为发布-订阅(Publish-Subscribe)模式,定义了一对多的依赖关系,让多个观察者对象同事监听某一个主题对象。当这个主题对象在状态变化时,会通知所有的观察者对象。优点: 降低了目标和观察者之间的耦合关系,被观察者发送通知,所有观察者对象都能收到消息。

2024-06-03 00:00:19 420

原创 设计模式(十五)行为型模式---迭代器模式(iterator)

提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部。

2024-06-03 00:00:05 377

原创 设计模式(十四)行为型模式---访问者模式(visitor)

访问者模式(visitor pattern)是封装一些作用于某种数据结构中的元素的操作,它可以在不改变这个数据结构(实现例子中的、男女)的前提下,定义作用于这些原则新的操作(实现例子中的成功、失败、待定等结果)。双分派:就是经历两次上面的分派过程就是双分派。

2024-06-02 18:23:30 449

原创 设计模式(十三)行为型模式---命令模式(command)

命令模式(command pattern)也叫动作模式或者事务模式。它是将请求(命令)封装成对象,使得可以用不同的请求对客户端进行参数化,具体的请求可以在运行时更改、排队和记录,它将发出者和 接收者解耦,顺序是: 发出者 --> 命令 --> 接收者。实际使用:Spring JdbcTemplate 中的execute/query方法、Runnable Thread start()。

2024-06-02 18:01:00 465

原创 设计模式(十二)行为型模式---模板方法模式(template)

模板方法模式(Template Method)是一种**基于继承实现的设计模式**,主要思想是:将定义的算法抽象成一组步骤,在抽象类中定义算法的骨架,把具体实现留给子类来实现。- 实际使用: JDBCTemplate,HttpServlet,Servlet过滤器。

2024-06-02 16:43:17 335

原创 设计模式(十一)结构型模式---代理模式(proxy)

代理模式(proxy pattern)就是为一个对象提供一个替身,以控制对这个对象的访问,更可以达到对该对象功能的增强。在AOP编程中如何选择代理模式:目标对象实现了接口采用JDK代理,目标对象未实现接口采用cglib代理。静态代理在使用时,需要定义接口或者父类,被代理对象(目标对象)与代理对象要实现相同的接口或者继承相同的父类。JDK代理是Java语言自带的代理,使用时候,要求被代理的对象需要有父类接口。实现原理就是:在内存中创建一个新的class对象。cglib代理也叫子类代理,

2024-06-02 15:51:37 609

原创 设计模式(十)结构型模式---享元模式(flyweight)

享元模式(fly weight pattern)主要是通过共享对象来减少系统中对象的数量,其本质就是缓存共享对象,降低内存消耗。内部状态和外部状态,内部状态是不会变化的,可以被多个对象共享,而外部状态会随着对象的使用而改变。实际中的使用:jdk-Interger(-128 127),存在于缓存池。

2024-06-02 15:20:40 380 1

原创 设计模式(九)结构型模式---外观模式(facade)

外观模式 (Facade Pattern)也叫门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。MyBatis的Configuration配置类,

2024-06-02 14:11:40 296

原创 设计模式(八)结构型模式---装饰者模式(decorator)

装饰者模式(Decorator Pattern)是动态的将新对象依附到对象上。相当于对象可以包裹对象本身,然后可以根据递归方式获取想要的信息。实际使用: JDK中的IO流。

2024-06-02 13:48:30 319

原创 设计模式(七)结构型模式---组合模式(composite)

组合模式(Composite Pattern)又叫整体模式,它创建了对象组的树形结构,将对象组合成树状结构来表示“整体-部分”的层次关系。实际使用点:HashMap中构造函数,有可以添加整个集合的构造,就是组合模式。

2024-06-02 13:36:17 254

原创 设计模式(六)结构型模式---桥接模式(bridge)

桥接模式(bridge pattern)是一种将抽象与实现分离,使它们独立变化。然后利用组合关系来代替继承关系,大大的降低了抽象和实现的耦合度的设计模式。实际使用: JDBC源码分析,定义了Driver接口,然后各个数据库厂商去实现Driver接口,

2024-06-02 13:24:32 399

原创 设计模式(五)结构型模式---适配器模式(adapter)

适配器模式(adapter pattern)是将一个类的接口转换成客户希望的另外一个接口,使得原来由于接口不兼容而不能一起工作的,而能一起工作。

2024-06-02 12:47:31 285

原创 设计模式基础知识点(七大原则、UML类图)

设计模式原则,就是在编程时,应当遵守的原则,是设计模式的基础,也是设计模式为什么这么设计的依据。设计模式通常有7大原则:单一职责原则、接口隔离原则、依赖倒转原则、里氏替换原则、开闭原则、迪米特法则、合成复用原则。

2024-06-02 02:07:31 646

原创 设计模式(一)创建型模式---单例模式(singleton)

单例模式(singleton pattern)属于创建型设计模式,就是采取一定的方法保证整个软件系统中,对于某个类只存在一个实例对象。一般来说单例模式有8种实现方式:1-2:饿汉式(静态常量、静态代码快);3-5:懒汉式(线程不安全,线程安全同步方法,线程安全同步代码块);6:双重检查;7: 静态内部类;8:枚举类;

2024-06-02 02:07:18 298 1

原创 设计模式(二)创建型模式---工厂模式(factory)

工厂模式(factory pattern)是一种创建型模式,主要有三种:简单工厂(Simple Factory)、工厂方法(Factory Method)、抽象工厂(Abstract Factory)。整个博客例子:设计一个咖啡点餐系统:设计一个咖啡类(Coffee),并定义两个子类,美式咖啡(AmericanCoffee)和拿铁咖啡(LatteCoffee),在设计一个咖啡店类(CoffeeStore),咖啡店具有点咖啡的功能。

2024-06-02 02:07:06 860

原创 设计模式(三)创建型模式---建造者模式(builder)

建造者模式(builder pattern)将对象的创建和表示分离,分离了对象的构建(Builder)和装配(Director),实现了构建和装配的解耦。不同的构建,相同的装配,可以创建不同的对象,相同的构建器,不同的装配顺序也可以做出不同的对象。

2024-06-02 02:06:45 352

原创 设计模式(四)创建型模式---原型模式(prototype)

原型模式(prototype pattern)是指:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象。工作原理:原型模式创建新的对象,其本质就是克隆,也就是 对象.clone()。

2024-06-02 02:06:30 287

原创 Java关键字详解

Java语言中预定义的、有特殊意义的标识符,它对于Java编译器有特殊意义,用户只能按照系统规定的方式使用,不能重新定义。Java中所有关键字都是小写的。Java关键字共50个。定义类的关键字。定义abstract修饰符可以用来修饰方法也可以修饰类,修饰的方法称为抽象方法,修饰的类是抽象类。抽象类和抽象方法的关系抽象类中可以没有抽象方法,但是有抽象方法的类一定是抽象类。语法// 抽象方法,abstract修饰且以();结束// 一般方法,必须有方法体特点和作用。

2024-06-01 20:07:19 837

原创 Java Web基础知识(Servlet、Cookie、Session、Filter、Listener)

Servlet是运行在Web服务器中的小型Java程序,侠义的Servlet是实现了Java语言实现的一个接口,广义的Servlet是任何实现了这个Servlet接口的类,作用是:接受用户的请求,并对请求做出处理,将处理结果响应给客户端。Servlet有三种实现方式:实现Servlet接口,继承抽象类GennericServlet,继承HttPServlet。Servlet是可以接受HTTP请求并做出相应的一种结束,是Java语言编写的一种动态资源。

2024-06-01 18:45:08 1110

原创 Java基础知识点(IO流)

Java实现序列化有两种方式:- 实现serializable接口:直接实现Serializable接口的类是JDK自动把这个类的对象序列化- 实现externaliazble接口:如果实现public interface Externalizable extends Serializable的类则可以自己控制对象的序列化,建议能让JDK自己控制序列化的就不要让自己去控制

2024-06-01 16:59:23 940

原创 Java基础知识点(反射、注解、JDBC、TCP/UDP/URL)

Java Reflection是Java被视为动态语言的基础啊, 反射机制允许程序在执行期间接入Reflection API获取任何类的内部信息,并能直接操作任意对象的内部属性及方法。Java注解又称Java标注、元数据,它提供了一种安全的类似注解的机制,用来将任何信息或者元数据(metadata)与程序元素(类、方法、属性等)进行关联。Java注解是附加在代码中的一些元数据,用于一些工具在编译、进行时进行解释和使用,起到说明配置的功能。

2024-06-01 16:29:29 778

原创 Java基础知识点(对象、构造器、封装、纪衡、多态、接口、内部类、异常处理机制)

- 什么是面向对象?1.Java的编程语言是面向对象的,采用这种语言进行编程称为面向对象编程。2.面向对象的本质就是:以类的方式组织代码,以对象的方式组织(封装)数据。 - 类与对象的关系1.类是一种抽象的数据类型,属于引用数据类型,它是对某一类事务的整体描述定义,但并不能代表某一个具体的事务(对象)。2.对象是具体类的是个实例。

2024-06-01 14:52:00 485

原创 Java基础知识点(标识符、数据类型、变量、运算符、包机制、流程控制、方法、数组)

Java是一种强类型语言,因此每个变量都必须声明其类型。Java变量是程序中最基本的存储单元,其要素包括变量名、变量类型和作用域。变量在使用前都必须对其声明,只有在声明后,才能为其分配对应长度的存储单元,申明格式为: type varName [=value] [{,varName[=value]}];数据类型 变量名 = 值;可以使用逗号隔开来声明多个同类型变量。

2024-06-01 14:26:02 593

原创 算法(十四)动态规划

动态规划(Dynamic Programming)是一种分阶段求解的算法思想,通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(分治)的方式去解决。动态规划中有三个重点概念:最优子结构:按照最佳的方式进行拆分,用来描述问题状态与状态之间的关系;边界:问题的边界区域,可以是除了最优子结构的其它区域;状态转移公式(递推公式)dp方程:根据最优子结构和边界终结出来的方程。

2024-06-01 01:36:11 399

原创 算法(十三)回溯算法---N皇后问题

回溯算法是类似枚举的深度优先搜索尝试过程,主要是再搜索尝试中寻找问题的解,当发生不满足求解条件时,就会”回溯“返回(也就是递归返回),尝试别的路径求解。N皇后问题研究的是:如何将n个皇后放在n * n的棋盘上,并且使皇后彼此之间不能相遇,也就是一个皇后的上下左右、以及斜着对角线上都不能有另外一个皇后,也就是一个皇后在 ”米“ 的视线中不能遇到另外一个皇后。

2024-06-01 00:45:49 1208

原创 算法(十二)分治算法

将字符串中的小写字母转化为大写字母,“abcde”转化为"ABCDE",我们可以利用分治的思想将整个字符串转化成一个一个的字符处理。比如: 2^10 2的10次幂。

2024-05-31 21:47:54 452

原创 算法(十一)贪婪算法

贪婪算法(Greedy)是一种在每一步都采取当前状态下最好的或者最优的选择,从而希望导致结果也是全局最好或者最优的算法。贪婪算法是当下局部的最优判断,不能回退。贪婪算法的高效性,以及所求得的答案比较接近最优结果,因此贪心算法可以作为辅助算法或者解决一些要求结果不那么精确的问题。

2024-05-31 20:03:43 3257

原创 字符串匹配算法(三)Trie树算法

Trid树,也叫”字典树“。它是一个树形结构。专门处理字符串匹配的数据结构,用来解决字符串集中快速查找某个字符串的问题。Trie 树的本质,就是利用字符串之间的公共前缀,将重复的前缀合并在一起。比如:有 6 个字符串,它们分别是:how,hi,her,hello,so,see,我们可以将这六个字符串组成下面的Trie树结构。其中,根节点不包含任何信息。每个节点表示一个字符串中的字符,从根节点到红色节点的一条路径表示一个字符串(红色节点为叶子节点)

2024-05-31 18:29:13 419

原创 字符串匹配算法(二)BM算法

BM算法也就是Boyer Moore算法,它是一种非常高效的字符串匹配算法,是一种滑动算法。什么是滑动?下面例子中,主串中的c,在模式串中不存在,所以模式串可以往后华滑动,因为只要有c存在,那么该字串肯定与模式串不匹配。BM算法,本质上其实就是在寻找这种规律,借助这种规律可以高效的实现字符串匹配。为了实现正确的滑动,BM算法包含了两个部分,分别是坏字符规则(bad character rule)和好后缀规则BM算法的匹配顺序是按照模式串的下标从大到小的顺序进行匹配。

2024-05-31 17:10:30 859

原创 字符串匹配算法(一)BF算法、RK算法

BF算法也就是Brute Force 算法,中文叫暴力匹配算法,也叫朴素匹配算法。 - 模式串和主串:例如:我们在字符串A中查找字符串B,那么字符串A就是主串,字符串B就是模式串。 - 主要思路:我们在主串中,检查其实位置分别是0 ~ n-m(n是主串A的长度,m是模式串B的长度)且长度为m的n-m+1个字串,看有没有跟模式串匹配的。

2024-05-31 14:05:34 284

原创 算法(十)归并排序

归并排序(merge sort)是一个采用了分治法的典型应用,首先将数据一半一半的向下拆分,直到拆分到最小元素为止;然后从拆分的最小元素开始,按照原路径进行合并,合并的时候进行排序;直到全部元素合并完成,排序完成。归并排序使用了递归思想(一级一级向下拆分、然后按照原路径一级一级向上合并)

2024-05-31 01:52:07 659

原创 算法(九)希尔排序

希尔排序(shell sort)选定一个小于N(数列长度)的整数gap作为第一增量,然后将所有距离为gap的元素分成一组,然后对每一组的元素进行插入排序。然后再取一个比前一个增量小的整数作为增量,重复上面的步骤操作…当增量大小减少到1时候,就相当于对整个序列再进行一次插入排序,然后排序完成。

2024-05-30 23:57:17 336

原创 算法(八)选择排序

选择排序(selection sort)是每一次从待排序列中先择一个最小值,然后将该值放在序列的起始位置(第一次是起始位置,后面就一次放在该值后面),直到全部待排数据排完位置。实际中,我们可以同时选出两个值,一个最小值放在序列开头,一个最大值放在序列末尾,这样效率就会高一倍。

2024-05-30 22:57:34 148

原创 算法(七)插入排序

插入排序(insertion sort)是从第一个元素开始,该元素就认为已经被排序过了。然后取出下一个元素,从该元素的前一个索引下标开始往前扫描,比该值大的元素往后移动。直到遇到比它小的元素时候,比它小元素的下一个元素就是该元素的位置;当索引值为0的时候,那么索引为0的位置就是该元素的位置。

2024-05-30 22:25:34 281

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除