自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Horace's Blog

博客:https://www.zhaohaihao.com

  • 博客(79)
  • 资源 (8)
  • 收藏
  • 关注

原创 Java设计模式之行为型-状态模式 (State)

????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义当一个对象的内在状态改变时允许改变其行为。状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况。可以将状态的判断逻辑转移到表示不同状态的一系列类当中,从而简化复杂的判断逻辑。三个角色状态模式主要有以下三个角色:环境类Context:也叫做上下文,维护一个当前状态,并将与状态相关的操作委托给...

2020-03-03 23:27:23 480 1

原创 Java设计模式之行为型-访问者模式 (Visitor)

????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改,接受这个操作的数据结构可以保持不变。访问者模式适用于数据结构相对稳定的系统,它把数据结构和作用于数据结构上的操作之间的耦合解脱开,使得操作集合可以相对自由的演化。访问者模式的核心就是根据不同的访问者对相同的数据产生不同的操作行为。五个角色访问者...

2020-03-03 18:03:15 459 1

原创 Java设计模式之行为型-责任链模式 (Chain of Responsibility)

????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义使多个对象都有机会去处理请求。从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。责任链模式也叫做职责链模式。三个角色责任链模式主要有以下三个角色:抽象处理者Handler:定义一个处理请求的接口,内部包含一个后继处理者的引用。具体处理者C...

2020-03-03 15:54:04 513 1

原创 Java设计模式之行为型-中介者模式 (Mediator)

????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。四个角色中介者模式主要有以下四个角色:抽象中介者Mediator:提供了注册同事对象与转发同事对象信息的抽象方法。具体中介者Concrete Mediator:管理同事对象类,协调...

2020-03-03 13:23:24 301 1

原创 Java设计模式之行为型-命令模式 (Command)

????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化。四个角色命令模式主要有以下四个角色:抽象命令类Command:声明执行操作的接口。具体命令类Concrete Command:是抽象命令类的具体实现类,持有接受者对象,同时通过调用接收者的功能来完成命令要执行的操作。接收者Receiver...

2020-03-02 17:23:04 262 1

原创 Java设计模式之行为型-备忘录模式 (Memento)

行为型-备忘录模式 (Memento)????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义在不破坏封装性的前提下,捕获一个对象的内部状态,并且在该对象之外保存这个状态,从而可以在将来合适的时候把这个对象还原到之前保存的状态。备忘录模式也叫快照模式。三个角色备忘录模式主要的角色有以下三个:发起人Originator:负责创建一个备忘录,记录当前时刻发起人的...

2020-03-02 12:10:28 282 1

原创 Java设计模式之行为型-观察者模式 (Observer)

????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者(观察者)都会收到通知并且自动更新。观察者模式提供了一种对象设计,让观察者和被观察者(主题)之间松耦合。四个角色观察者模式的主要角色有以下四个:抽象主题角色Subject:将所欲对观察者对象的引用保存在一个集合里,每个主题都可以有任...

2020-03-02 00:09:11 408 1

原创 Java设计模式之行为型-解释器模式 (Interpreter)

????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。定义中提到的文法和句子的概念同编译原理中的描述相同,“文法”指的语言的语法规则,而“句子”是指语言集中的元素。四个角色解释器模式主要有四个角色:环境角色Context:包含解释器之外的一些全局信息。抽象表达式...

2020-03-01 19:24:11 271 1

原创 Java设计模式之行为型-策略模式 (Strategy)

????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。三个角色策略模式中主要有三个角色:抽象策略类Strategy:定义所有支持的算法的公共接口,可以是接口也可以是抽象类。具体策略类Concrete Strategy:封装具体的算法或者行为。环境类Conte...

2020-02-28 17:59:28 273 1

原创 Java设计模式之行为型-迭代器模式 (Iterator)

????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。四个角色迭代器模式主要有以下四个角色:抽象聚合角色Aggregate:定义存储、添加、删除聚合对象以及创建迭代器对象的接口。具体聚合角色Concrete Aggregate:实现抽象聚合类,返回一个具体的迭代器实例。抽象迭代器Iter...

2020-02-28 15:47:15 232 1

原创 Java设计模式之行为型-模板方法模式 (Template Method)

????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义定义一个算法的步骤,并允许子类为一个或者多个步骤提供实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。场景示例笔者这里以做番茄炒蛋为例。笔者将做番茄炒蛋的步骤分为以下几步:倒油、放鸡蛋、放番茄、倒调料、翻炒。不考虑多余的细节问题,不同的人做番茄炒蛋的步骤应该是类似的。创建抽象模板...

2020-02-27 16:42:42 192 1

原创 Java设计模式之结构型-代理模式 (Proxy)

结构型-代理模式 (Proxy)????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义为其他对象提供一种代理用来控制对这个对象的访问。在代理模式中,代理对象作为访问对象和目标对象之间的中介。场景示例笔者这里以购买火车票为例。我们购买火车票不一定要去火车站购买,我们可以通过12306网站或者去火车票代售点购买。基于继承的静态代理实现创建目标对象/** *...

2020-02-26 23:31:08 408 1

原创 Java设计模式之结构型-桥接模式 (Bridge)

结构型-桥接模式 (Bridge)????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义将抽象部分与它的具体实现部分分离,使它们都可以独立地变化。桥接模式是通过组合的方式建立两个类之间的联系,而不是通过继承。四个角色桥接模式中主要有以下四个角色:抽象化角色Abstraction:定义抽象类,同时包含一个对实现化对象的引用。扩展抽象化角色Refined A...

2020-02-26 15:47:07 319 1

原创 Java设计模式之结构型-组合模式 (Composite)

结构型-组合模式 (Composite)????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。模式中的角色抽象构件Component:为组合中的叶节点对象和分支节点对象声明公共接口并实现它们的默认行为。树叶构件Leaf:是组合中的叶节点对象,叶节点没有...

2020-02-22 17:03:34 2438 1

原创 Java设计模式之结构型-享元模式 (Flyweight)

????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义运用共享技术有效地支持大量细粒度的对象。“享”即共享,“元”指的是元件,也就是小颗粒的东西。“享元”顾名思义就是共享小部件。很多的系统程序包含大量的对象,但是这些对象绝大多数都是差不多的,除了一些极个别的属性外。那么也就是说,在一个系统程序中有多个相同对象的时候,我们只需要共享一份就可以了,不必去实例化每一个...

2020-02-16 23:41:00 204 1

原创 Java设计模式之结构型-适配器模式 (Adapter)

????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义将一个类的接口转换成客户端期望的另一个接口。适配器模式可以使原本接口不兼容的类可以一起工作。两种模式适配器模式有两种模式:对象适配器:采用组合方式进行类的委托类适配器:采用继承方式三种角色目标角色(Target):客户端所期待的接口(也可以是具体类或者抽象类)。源角色(Adaptee):被适配...

2020-02-14 19:21:22 334 1

原创 Java设计模式之结构型-装饰器模式 (Decorator)

????文章示例代码????装饰器模式对于笔者来说,印象还是比较深刻的。因为当年笔者考软件设计师的设计模式大题考的就是这个模式,差点阵亡。附链你也可以在这些平台阅读本文:语雀个人博客定义动态地为一个对象添加一些额外的职责。在扩展原有对象功能上,装饰器模式比继承的方式更加灵活。模式中的角色抽象构建(Component):定义一个抽象接口(可以是抽象类),用以给对象动态地添加职责。...

2020-02-14 00:52:22 227 1

原创 Java设计模式之结构型-外观模式 (Facade)

????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又叫门面模式,是符合迪米特法则的。场景示例作为一个病人去医院看病,可能需要经过挂号、门诊、划价、取药这几个步骤。相对来说过程可能较为繁琐,先来看下代码层面是如何实现的。创建实体类/** * @...

2020-02-13 17:13:17 272 1

原创 Java设计模式之创建型-原型模式 (Prototype)

????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式不需要知道任何创建的细节,也不调用构造函数。三个基本步骤原型模式的核心在于原型类,而满足原型模式的原型类需要进行以下三个步骤:实现Cloneable接口。 Cloneable 接口实际上是个空接口(标记接口)。表明只有实现该接口才能够...

2020-02-13 11:53:40 220 1

原创 Java设计模式之创建型-单例模式 (Singleton)

????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义保证一个类有且仅有一个实例,并且提供一个可以访问它的全局访问点。三个基本步骤实现单例模式有三个基本的步骤:私有构造方法用来限制外部类对其直接实例化提供一个私有静态当前类的对象作为变量提供一个公有静态方法返回类的实例实现单例模式的几种方式懒汉式懒汉式单例模式在类创建的时候不会创建实例,因此类的加载...

2020-02-12 18:07:03 237 1

原创 Java设计模式之创建型-建造者模式 (Builder)

????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。用户只需指定需要建造的类型就可以得到它们,建造过程及细节不需要知道。建造者模式注重于方法的调用顺序,而工厂模式注重于创建产品。四要素标准建造者模式有四个要素:**产品类:**既可以是具体的实体类,也可以是抽象类与其具体实现组成。...

2020-02-12 15:03:22 279 1

原创 Java设计模式之创建型-抽象工厂模式 (Abstract Factory)

????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义提提供一个创建一系列相关或者相互依赖对象的接口,无须指定他们的具体的类,从而创建多个产品族中的产品对象。在讲抽象工厂模式之前,这里先引入两个概念,以便更好地了解抽象工厂模式(以下用工厂方法模式中的示例为例)。**产品族:**在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品层次结构中的一组产品。比如...

2020-02-12 15:01:11 193 1

原创 Java设计模式之创建型-工厂方法模式 (Factory Method)

????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法模式让类的实例化推迟到子类中进行。场景示例笔者这里通过简单工厂模式中示例的演变来进行讲解。/** * @author zhh * @description 手机工厂类 * @date 2020-02-10 11:09 */pu...

2020-02-12 14:58:52 317 1

原创 Java设计模式之创建型-简单工厂模式 (Simple Factory)

????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义一个工厂方法,根据传入的不同参数,生成对应的具体实例化对象。简单工厂属于创建性模式,但是其不属于GOF23种设计模式场景示例假设笔者拥有很多品牌的手机(虽然笔者没有),这里以笔者选择品牌手机打电话作为示例。创建基类(可以是接口或者是抽象类)创建基类,基类可以是接口或者是抽象类。这里以创建手机接口为例。/...

2020-02-12 14:55:51 215 1

原创 Java设计模式之设计原则-合成复用原则 (CRP)

????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义尽量使用对象组合(contains-A)/聚合(has-A),而不是通过继承(is-A)达到软件复用的目的。类的复用一般分为两种:一种是组合/聚合,另一种则是继承。继承复用的优点在于扩展性较好,子类继承父类,父类的大部分功能都可以提供给子类使用,修改和扩展相对比较容易。继承复用的缺点在于这种方式会破坏包装,继...

2020-02-12 14:52:28 921 1

原创 Java设计模式之设计原则-里氏替换原则 (LSP)

附链你也可以在这些平台阅读本文:语雀个人博客定义任何基类可以出现的地方,子类一定可以出现。里氏替换原则是继承复用的基石,只有当子类可以替换掉基类且软件单位的功能不受到影响的时候,基类才能真正被复用,而子类也能够在基类的基础上去增加新的行为。里氏替换原则通俗点来说就是:子类可以扩展父类的功能,但不能改变父类原有的功能。通过以上这句话,可以引申出以下几点含义:**含义一:*...

2020-02-12 14:49:40 347 1

原创 Java设计模式之设计原则-迪米特法则 (LoD)

????文章示例代码????迪米特法则也叫做最少知道原则。附链你也可以在这些平台阅读本文:语雀个人博客定义一个对象应该对其他对象保持最少的了解。在《Head First 设计模式》一书中,针对该原则也强调:只和你的密友交流。在程序中,出现在成员变量、方法的输入、输出参数中的类我们可以称之为成员朋友类,而出现在方法体内部的类不属于朋友类。这些个成员朋友类的对象和当前对象之间存在关联、...

2020-02-12 14:45:34 263 1

原创 Java设计模式之设计原则-接口隔离原则 (ISP)

????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义用多个专门的接口,而不使用单一的总接口,客户端不应该被迫依赖于它不使用的方法。注意点一个类对另一个类的依赖应该建立在最小的接口上建立单一接口,不要建立一个庞大臃肿的接口尽量细化接口,接口中的方法尽量少注意适度原则(接口太小会导致接口数量过多,设计变得复杂)场景示例创建动物接口创建一个动物的接口,...

2020-02-12 14:42:07 347 1

原创 Java设计模式之设计原则-单一职责原则 (SRP)

????文章示例代码????附链你也可以在这些平台阅读本文:语雀个人博客定义就一个类而言,有且仅有一个引起它变更的原因。一个类/接口/方法只负责一项职责。如何理解假设有个 A 类负责职责1和职责2两个职责。当需求发生变更时,比方说职责1相关的功能需要发生改变,那我们在修改 A 这个类的时候就有可能会导致原本运行正常的职责2发生故障。也就是说对于这个 A 类来说,当职责1和职责2的...

2020-02-12 14:37:49 352 1

原创 Java设计模式之设计原则-依赖倒置原则 (DIP)

????文章示例代码????定义高层模块不应该依赖底层模块,二者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。针对接口编程,而不要针对实现编程。场景示例假设笔者现在要去超市购物,需要买点可乐和薯片。这一过程笔者分别用面向实现和面向过程两种方式进行实现。面向实现编程创建实体类创建一个人物实体类,同时在人物实体类内部实现购买可乐和购买薯片的两个方法。/** * @author ...

2020-02-12 14:29:44 300 1

原创 Java设计模式之设计原则-开闭原则 (OCP)

设计原则-开闭原则 (OCP)????文章示例代码????定义一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。开闭原则强调的是用抽象构建框架,用实现来扩展细节。场景示例笔者这里以超市中的商品做一个简单的示例来方便理解。创建商品接口首先创建一个商品接口,同时在接口内部定义获取商品ID、名称、价格的各个方法。一般来说,一个商品是一个实体,后续我们可以去写一个类包含商品ID、名称、价格这...

2020-02-12 14:02:43 492 1

原创 【Java】手机号校验与脱敏处理

背景前不久,博主刚刚通过阿里巴巴编码规范(Java)认证,其中的安全规约当中强制规定:用户敏感数据禁止直接展示,必须对展示数据进行脱敏。以博主所在小团队最近正在开发的小程序为例:针对用户手机号的展示,隐藏中间4位,防止隐私泄露。如下图所示: 图1由于手机只做展示作用,为安全起见,博主将手机脱敏放置后端处理。代码实现针对手机脱敏进行代码实现,顺便也实现下手机号码的格式校验。1.手...

2018-12-29 12:43:24 11706

原创 【调试工具】ngrok的安装与使用

什么是ngrok?ngrok 是一个反向代理工具,通过公共的端点和本地运行的WEB服务器在两者之间建立一个安全的通道。同时,ngrok 还可以捕获、分析所有通道上的流量,便于后期的分析与重放。为什么要使用ngrok?在项目开发的过程当中,我们通常会遇到这样的场景:需要临时地将本地的服务提供给外网使用。大多数情况下,我们都会这么做:找一台运行在外网环境下的服务器在服务器上搭建所需要的环境...

2018-12-26 11:04:23 472

原创 【Java】代码结构设计思考

背景这篇博文是博主在做数据图形统计相关接口工作过程中对代码结构设计的一些思考总结,仅代表个人观点。1.需求简述提供资金关系数据图形统计,根据不同菜单地址跳转至对应图形页面显示相关业务统计数据。2.开发设计过程2.1 在开发的初期,考虑到各个数据图形统计具体实现细节的不同,以及代码的可扩展性(非全面),博主是这样设计的(忽略网络请求的复杂细节以及框架细节)。 图1服务端提供不同的...

2018-12-11 13:07:45 1629

原创 【Java】阿里云短信发送功能实现

前言在移动端我们除了使用账号密码、第三方社交平台账号(例如:微信、QQ、微博等)这几种登录方式以外,也会通过手机短信验证码的方式来做登录。博主最近正在做移动端的手机短信验证登录。原本为了简单起见,选用的是某个不知名科技公司的短信服务,但是收费贵,服务也不太稳定等一系列问题,博主就开始另寻他路。短信服务选择博主挑选了几家大公司的短信服务,以下为各服务官网的产品价格:阿里云短信服务腾讯云...

2018-11-22 19:54:23 1884

原创 【SpringBoot】集成JWT实现用户认证

初识JWT1.什么是JWTJSON Web Token (JWT) 是一个开放标准 (RFC 7519),它定义了一种紧凑且独立的方式,可以在客户端与服务器之间作为JSON对象安全地传输信息。2.JWT使用场景身份验证: 用户在登录以后,后续的每个请求都将包含JWT,允许用户访问该令牌允许的路由,服务和资源等。Session同样也可以实现这个功能,但是在使用Session的同时也会相应的...

2018-11-16 14:20:29 5020 4

原创 【Git】Git常用命令汇总整理(未完待更)

说明:蓝色字体(包括表格内容、标题)用作锚点方便详情跳转与回跳 Git 常用命令 命令 简要说明 git add 添加至暂存区 git branch 分支管理 git checkout 检出到工作区、切换或创建分支 git clone 克隆版本库 git commit 提交 git config...

2018-09-04 19:41:12 360 2

原创 【Git】Git 与 SVN 的区别概述

  日常工作中,经常会用到版本控制工具,目前用到的比较广泛的版本控制工具就是 SVN 和 Git 。这里对两者的区别做个简单概述。定义  SVN:是一个远程集中式的版本控制系统,与 RCS、CVS 比较来说,SVN 采用了分支管理系统,其设计的目的是为了取代 CVS 。   Git:是一个开源的分布式版本控制系统,可以有效、高速地处理从小到非常大的项目版本管理。主要区别存储方式区...

2018-09-04 16:09:47 5159 2

原创 【Linux】执行 service iptables save 命令异常解决

遇到问题  博主在 CentOS7 安装 Redis 的过程中,使用 iptables 命令添加完 iptables规则以后,需要保存规则永久生效,当执行 service iptables save 命令时提示以下错误信息:   解决方案  遇到此问题是因为没有安装 iptables 服务,因此需要先安装 iptables 服务。 1 关闭防火墙systemctl stop ...

2018-06-27 17:08:22 5008 1

原创 【MySQL】Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 异常解决

前言  最近给公司某系统公众号端开发新功能,其中涉及到的一个功能点就是要分组查询每个强电井最新的一条记录,考虑到代码量和代码的复杂度,我直接使用了MySQL中的组内查询,在本地测试运行程序可行,但当部署到测试服务器时出现了异常,拉取测试服务器日志出现以下异常:    产生异常的原因就是所写组内查询引起的:SELECT a.* FROM tbl_inspection_equipment_...

2018-06-04 14:46:55 518

Prism Pretty

A Chrome Extension to format/highlight/preview HTML/JS/CSS/Markdown code with Prism.js

2018-07-02

CentOS-7-x86_64镜像文件

由于文件过大,提供百度网盘链接,永久有效! 由于文件过大,提供百度网盘链接,永久有效! 由于文件过大,提供百度网盘链接,永久有效!

2017-09-12

DHC - REST/HTTP API Client - Chrome插件(谷歌浏览器插件)

DHC是一款RESTful的测试客户端,可以帮助用户测试RESTFul Api。

2017-06-12

Wox搜索插件

Alfred 的 Windows 版最佳替代品,国产开源免费的软件快捷启动工具 Wox!它可以搜索你电脑上的程序,通过快捷键呼出搜索框,输入少量字母快速匹配出对应软件并启动、打开网页、翻译单词、或配合 Everything 插件搜索任意文件等等,提供使用教程链接http://www.iplaysoft.com/wox.html

2017-06-05

cmder64位下载

cmd用着不舒服 喜欢折腾换了cmder 自己修改了一些参数 去掉了启动的校验弹框 很好用

2017-06-05

node.js安装包64位

node.js安装包64位

2017-05-18

Git-1.9.5安装包

Git-1.9.5安装包

2017-05-18

github离线桌面安装包

github

2017-02-12

空空如也

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

TA关注的人

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