- 博客(44)
- 资源 (2)
- 收藏
- 关注
原创 职责链模式
一、职责链模式介绍 职责链模式,又叫责任链模式,为请求创建了一个接受者对象的链。这种模式对请求的发送者和接受者进行解耦。职责链模式中,每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依次类推。 职责链模式,使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传...
2019-11-10 14:09:47
638
原创 策略模式
一、策略模式介绍 策略模式定义了一组算法,并将每个算法封装起来,让他们之间可以互相替换,使算法本身和使用算法的客户端分割开来。 策略模式体现了几个设计原则:①把变化的代码从不变的代码中分离出来;②针对接口编程而不是具体类(定义了策略接口);③多用组合/聚合,少用继承(客户通过组合方式使用策略)。二、策略模式原理图说明:从上图可以看出,context有成员...
2019-11-10 10:21:02
325
原创 状态模式
一、状态模式介绍 状态模式,它主要用来解决对象在多种状态转换时,需要对外输出不同行为的问题。状态和行为是一一对应的,状态之间可以相互转换。当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类。二、状态模式原理图说明:1)Context类:为环境角色,用于维护ConcreteState实例,这个实例定义当前状态2)State:是抽象状态角色,定...
2019-11-09 16:31:33
301
原创 解释器模式
一、解释器模式介绍 在编译原理中,一个算法表达式通过语法分析器形成词法单元,而后这些词法单元再通过语法分析器构建语法分析树,最终形成一颗抽象的语法分析树,这里的词法分析器和语法分析器都可以看做是解释器。 解释器模式是指给定一个语法(表达式),并定义它的文法的一种表示,再定义一个解释器,使用该解释器来解释语言中的句子(表达式)。二、解释器模式原理图说明:...
2019-11-09 14:40:42
351
原创 备忘录模式
一、备忘录模式介绍 备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 备忘录模式可以这样理解:现实生活中的备忘录是用来记录某些要去做的事情,或者是记录已经达到的共同意见的事情,以防忘记。而在软件层面,备忘录模式有着相同的含义,备忘录对象主要用来记录一个对象的某种状态,或者某些数据,当要做...
2019-11-02 18:11:09
304
原创 中介者模式
一、中介者模式介绍 中介者模式,用一个中介对象来封装一系列的对象交互,中介者使各个对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。二、中介者模式原理图说明:1)Mediator:就是抽象中介者,定义了同事对象到中介者对象的接口2)Colleague:是抽象同事类3)ConcreteMediator:具体的中介者对象,实现抽象方法...
2019-10-27 19:16:18
290
原创 观察者模式
一、观察者模式介绍 观察者模式是对象之间多对一的一种设计方案,定义了对象之间一对多的依赖,被依赖的对象为Subject,依赖的对象为Observer。这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新,即Subject通知Observer变化。二、观察者模式原理图 观察者模式类似于订牛奶业务:1)奶站/气象局:Subject;2)用户/第三方网...
2019-10-27 15:34:47
416
原创 迭代器模式
一、迭代器模式介绍 如果我们的集合元素是用不同的方法实现的,有数组,还有java的集合类或者还有其他方法,当客户端要遍历这些集合元素的时候,就要使用多种遍历方式,而且还会暴露元素的内部结构,可以考虑使用迭代器模式解决。 迭代器模式提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需知道集合元素对象的底层表示,即不暴露其内部的结构。二、迭代器原理图...
2019-10-27 10:58:08
264
原创 访问者模式
一、访问者模式介绍 访问者模式,是封装一些作用于某种数据结构的各元素操作,它可以在不改变数据结构的前提下,定义作用域这些元素的新的操作。主要将数据结构与数据操作分离,解决数据结构和操作耦合性问题。 访问者模式的基本工作原理是:在被访问的类里面加一个对外提供接待访问者的接口。二、访问者模式原理图说明:1)visitor:是抽象访问者,为该对象结构中的C...
2019-10-26 11:51:54
333
原创 命令模式
一、命令模式介绍 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个。我们只需要在程序运行时指定具体的请求接收者即可,此时可以使用命令模式来设计。 命令模式使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活,实现解耦。在命令模式中,会将一个请求封装为一个对象,以便使用不同参数来表示不同的请求...
2019-10-13 16:28:32
307
原创 模板方法模式
一、模板方法模式介绍 模板方法模式又叫模板模式。在一个抽象类公开定义了它的方法模板,它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。简单的说,模板方法模式定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤。二、模板方法模式原理图模板方法模式的原理图如下所示:说明:1)abstr...
2019-10-13 11:48:46
233
原创 代理模式
一、代理模式介绍 代理模式是指为一个对象提供一个替身,以控制对这个对象的访问,即通过代理对象访问目标对象。这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象。 代理模式有不同的形式,主要有三种:静态代理、动态代理(JDK代理、接口代理)和cglib代理(可以在内存动态的...
2019-10-01 11:44:29
245
原创 享元模式
一、享元模式基本介绍 享元模式也叫蝇量模式,运用共享技术有效地支持大量细粒度的对象 。它常用于系统底层开发,解决系统的性能问题。像数据库连接池,里面都是创建好的连接对象,在这些连接对象中,有我们需要的则直接拿来用,避免重复创建。如果没有我们需要的,则新创建一个 。 享元模式能够解决重复对象内存的浪费问题。当系统中有大量相似对象,可以创建缓冲池而不需要总是创建新对象。当...
2019-09-22 19:52:03
285
原创 外观模式
一、外观模式介绍 外观模式也叫过程模式。外观模式通常定义一个一致的接口,用于屏蔽内部子系统的细节,使得调用端只需跟这个接口发行调用,而无需关心这个子系统的内部细节。二、外观模式原理外观模式原理类图如下所示:说明:1)外观类(Facade):为调用端提供统一的调用接口,外观类知道哪些子系统负责处理哪些请求,从而将调用端的请求代理给适当子系统对象2)调用者(Cli...
2019-09-22 17:02:38
348
原创 组合模式
一、组合模式介绍 组合模式又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构,以表示“整体-部分”的层次关系。组合模式使得用户对单个对象和组合对象的访问具有一致性,即:组合能让客户以一致的方式处理个别对象以及组合对象。二、组合模式原理组合模式原理类图如下所示:说明:1)Component:这是组合中对象声明接口,在适当情况下,实现所有类共有的接口默...
2019-09-22 15:05:24
359
原创 装饰者模式
一、装饰者模式介绍 装饰者模式是动态地将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了开闭原则(ocp)。二、装饰者模式原理装饰者模式原理图如下所示:说明:装饰者模式就像打包一个快递,主体:比如陶瓷、衣服;包装:比如报纸填充、塑料泡沫、纸板、木板1)Component:主体,比如下面的Drink2)ConcreteCompon...
2019-09-22 10:46:03
353
原创 桥接模式
一、桥接模式的基本介绍 桥接模式是指将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变。桥接模式基于类的最小设计原则,通过封装、聚合及继承等行为让不同的类承担不同的职责。它主要特点是把抽象(abstraction)与行为实现(implemention)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展。二、桥接模式原理桥接模式原理类图如下所示:原理类图...
2019-09-21 15:26:59
953
原创 适配器模式
一、适配器模式介绍 适配器模式将某个类的接口转化成客户端期望的另外一个接口表示,主要目的是兼容性,让原本因为接口不匹配而不能在一起工作的两个类可以协同工作,其别名为包装类。现实生活中的适配器例子:泰国插座用的是两孔的(欧标),可以买个多功能转换插头(适配器),这样就可以使用了。二、适配器模式工作原理 适配器模式是将一个类的接口转换成另一种接口。让原本接口不兼容...
2019-09-21 11:50:38
317
原创 建造者模式
一、建造者模式介绍 建造者模式又叫生成器模式,是一种对象构建模式。它可以将复杂对象的构造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现的对象。 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过制定负责对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。二、建造者模式原理图建造者模式有四个角色:Product、...
2019-09-07 22:08:34
489
原创 原型模式
一、原型模式基本介绍 原型模式是指用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象。原型模式是一种创建型设计模式,它允许一个对象再创建另外一个可定制的对象,无需知道创建的细节。 原型对象的工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象来拷贝它们自己来实现创建,即:对象.clone()。二、原型对象原理...
2019-09-07 11:25:01
290
原创 抽象工厂模式
一、抽象工厂模式介绍 抽象工厂模式是定义了一个interface用于创建相关或有依赖关系的对象蔟,而无需知道具体的类。它将工厂抽象成两层,AbsFactory(抽象工厂)和具体的实现的工厂子类。程序员可以根据创建对象类型使用对应的工厂子类。这样将单个简单工厂类变成了工厂蔟,更利于代码的维护和发展。 抽象工厂模式可以将简单工厂模式或工厂方法模式整合,从设计层面看,抽象...
2019-09-01 16:12:16
481
原创 工厂方法模式
一、工厂方法模式介绍 工厂方法模式定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类。二、工厂方法模式例子 披萨项目新的需求:客户在点披萨时,可以点不同口味的披萨,比如北京的奶酪pizza、北京的胡椒pizza或是伦敦的奶酪pizza、伦敦的胡椒pizza。 使用工厂方法模式来完成披萨项目新的需求,将披萨项...
2019-09-01 12:08:02
350
原创 简单工厂模式
一、简单工厂模式介绍 简单工厂模式是工厂模式的一种,也是工厂模式家族中最简单使用的模式。简单工厂模式定义了一个创建对象的类,由这个类来决定创建出哪一种产品类的实例。在软件开发中,当需要大量创建某种、某类或某批对象时,就会使用到工厂模式。简单工厂模式也叫静态工程模式。二、简单工厂模式例子 完成一个披萨的项目需求:要便于披萨种类的扩展,要便于维护。1)披萨的种类很多;...
2019-09-01 11:11:36
901
原创 单例模式
一、单例模式介绍 单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象的实例方法(静态方法) 。二、单例模式实现方式 单例模式的实现步骤为:1)构造器私有化(防止new);2)类的内部创建对象;3)向外暴露一个静态的公共方法(getInstance())。单例模式的实现方式一共有8种,分别为:饿汉式...
2019-08-25 11:00:06
437
原创 七大设计原则之合成复用原则
一、合成复用原则介绍合成复用原则是指尽量使用合成/聚合的方式,而不是使用继承。类图介绍如下:二、依赖关系、组合关系、聚合关系介绍2.1依赖关系(Dependency) 只要是在类中用到了对方,那么他们之间就存在依赖关系,如果没有对象,连编译都通过不了。 类图如下:依赖关系常出现在:1)类中用到了对象;2)类的成员变量;3)方法的返回类型;4)方法接收的参数类...
2019-08-24 14:09:00
2291
1
原创 七大设计原则之迪米特法则
一、迪米特法则介绍 迪米特法则(Demeter Principle)又叫最少知道原则。它是指一个类对自己依赖的类知道得越少越好。也就是说,对于被依赖的类,不管多么复杂,都尽量将逻辑封装在类的内部,对外除了提供public方法外,不对外泄露任何消息。 迪米特法则还有一个更简单的定义:只与直接朋友通信。这里的直接朋友的定义是:每个对象都会与其他对象有耦合关系,只要两个...
2019-08-24 11:25:08
519
原创 七大设计原则之开闭原则
一、开闭原则介绍 开闭原则(Open Closed Principle)是编程中最基础,也是最重要的设计原则。编程中遵循其他原则以及使用设计模式的目的就是遵循开闭原则。 一个软件实体如类,模块和函数应该对(提供方)扩展开放,对(使用方)修改关闭。用抽象构建架构,用实现扩展细节。当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变...
2019-08-18 20:43:46
1612
原创 七大设计原则之里氏替换原则
面向对象继承包含了这样一层含义:父类中凡是已经实现好的方法,实际上是在设定规范和契约。虽然它不强制要求所有的子类必须遵循这些契约,但是如果子类对这些已经实现的方法进行任意修改,就会对整个继承体系造成破坏。 继承在给程序设计带来便利的同时,也带来了弊端。比如使用继承会给程序带来侵入性,程序的可移植性降低,增加对象间的耦合性。如果一个类被其他的类所继承,则当这个类需要...
2019-08-18 18:58:10
501
原创 七大设计原则之依赖倒置原则
一、依赖倒置原则介绍依赖倒置原则的定义如下:High level modules should not depend upon low level modules,Both should depend upon abstractions.Abstractions should not depend upon details.Details should depend upon abst...
2019-08-18 11:26:11
501
原创 七大设计原则之接口隔离原则
一、接口隔离原则介绍 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。初看这个定义,让人摸不着头脑,我们看一个类图,看如下图所示: 类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类D。如果接口Interface1对于类A和类C来说不是最小接口,也即类B只需要实现operation1、operatio...
2019-08-16 22:24:48
689
原创 七大设计原则之单一职责原则
一、单一职责原则基本介绍 单一职责原则,从字面上可以看出:一个类只负责一项职责。对类来说,即一个类应该只负责一项职责,如类A负责两个不同职责:职责1、职责2,当职责1需求变更而改变类A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1、A2。 一个类只有一个引起它变化的原因,那这个类只有一个职责。每一个职责都是变化的一个轴线。如果一个类有一个以上的职责,这些职...
2019-08-11 16:43:35
419
原创 设计模式介绍
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。一、设计模式简介 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。...
2019-08-10 18:09:49
441
原创 浮点数运算精度问题分析与解决方案
最近在项目中遇到精度计算问题,用Double类型的数据减去Double类型的数据,得出的结果在预期之外,经过一番思考与学习,最后找到解决问题的方案。一、浮点数运算导致精度问题现象代码如下:Double num1 = 2.1;Double num2 = 2.0;System.out.println(num1 - num2);用人类的口算可以知道,结果是0.1。可是...
2019-08-04 22:19:50
4412
原创 JStorm介绍
一、简介JStorm是一个分布式实时计算引擎。JStorm是一个类似于Hadoop MapReduce的系统,用户按照指定的接口实现一个任务,然后将这个任务交给JStorm系统,JStorm将这个任务跑起来,并按7*24小时运行。如果中间一个worker发生了意外故障,调度器立即分配一个新的worker来替换这个失效的worker。从应用的角度上看,JStorm是一种遵循某种编程规范的分布...
2018-07-21 20:48:11
22282
2
原创 浅谈Java内存模型
当多个线程访问同一个对象时,如果不考虑这些线程在运行时环境下的调度和交替运行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获取正确的结果,那这个对象是线程安全的。而出现线程安全问题一般是因为主内存和工作内存数据不一致性和重排序导致的,解决线程安全问题最重要的就是理解这两个问题是怎么来的。那么理解它们的核心在于理解java内存模式。 ...
2017-11-03 10:30:17
839
原创 Java与线程实现
并发不一定要依赖多线程,但在Java中谈论并发时,大多数都与线程脱不了关系。一、线程的实现 线程是比进程更轻量级的调度执行任务,线程的引入,可以把一个进程的资源分配和执行调度分开,各个进程既可以共享进程资源,又可以独立调度(线程是CPU调度的基本单位)。 主流操作系统都提供了线程的实现,Java语言则提供了在不同硬件和操作系统平台下对线程操...
2017-10-29 10:15:49
1147
原创 创建多线程的4种方式
线程被称为轻量级进程,是程序执行的最小单位,它是指在程序执行过程中,能够执行代码的一个执行单位。每个程序程序都至少有一个线程,也即是程序本身。线程的状态有5种:新建、运行、等待、阻塞和结束;创建线程的方式有4种。
2017-10-25 09:00:14
8513
1
原创 虚拟机类加载机制
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。一、类加载器过程 在Java语言中,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为Java应用程序提供高度的灵活性,Java里天生可以动态扩展的语言特性是...
2017-10-21 10:01:55
1397
原创 Java中Object类之clone()方法详解
一、clone()方法 clone意思是克隆、复制。在Java语言中,当对象调用clone()方法时,就会复制已有的对象。clone()方法在根类Object中定义如下。/** * Class Object is the root of the class hierarchy. Every class has Object as a superclass. * Al...
2017-10-16 08:40:40
10556
1
原创 Java 枚举(enum)用法详解
Java1.5发行版本中增加了新的引用类型--枚举类型(enumtype)。枚举类型是指由一组固定的常量组成合法值的类型。在Java虚拟机中,枚举类是以用语法糖实现的,在进行编译时会转变成普通的Java类。 创建枚举类型要使用enum关键字,隐含了所创建的类型都是java.lang.Enum类的子类(java.lang.Enum是一个抽象类)。枚举类型的通用格式...
2017-10-13 18:04:17
2724
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人