自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(89)
  • 收藏
  • 关注

原创 设计模式之职责链模式

职责链模式学校 OA 系统的采购审批项目:需求是采购员采购教学器材1、如果金额小于等于5000,由教学主任审批(0<=x<=5000)2、如果金额小于等于10000,由院长审批(5000<x<=10000)3、如果金额小于等于30000,由副校长审批(10000<x<=30000)4、如果金额超过30000以上,有校长审批(30000<x)请设计程序完成采购审批项目传统方案解决 OA 系统审批,传统的设计方案(类图)..

2020-12-16 23:38:09 347

原创 设计模式之策略模式

策略模式在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超市促销可以釆用打折、送商品、送积分等方法。在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序策略有冒泡排序、选择排序、插入排序、二叉树排序等。如果使用多重条件转移语句实现(即硬编码),不但使条件语句变得很复杂,而且增加、删除或更换算法要修改原代码,不易维护,违背开闭原则。

2020-11-24 23:22:05 275

原创 设计模式之状态模式

状态模式在软件开发过程中,应用程序中的部分对象可能会根据不同的情况做出不同的行为,我们把这种对象称为有状态的对象,而把影响对象行为的一个或多个动态变化的属性称为状态。当有状态的对象与外部事件产生互动时,其内部状态就会发生改变,从而使其行为也发生改变。如人都有高兴和伤心的时候,不同的情绪有不同的行为,当然外界也会影响其情绪变化。对这种有状态的对象编程,传统的解决方案是:将这些所有可能发生的情况全都考虑到,然后使用 if-else 或 switch-case 语句来做状态判断,再进行不同情况的处理。但是显

2020-11-12 23:57:06 297

原创 设计模式之解释器模式

解释器模式在软件开发中,会遇到有些问题多次重复出现,而且有一定的相似性和规律性。如果将它们归纳成一种简单的语言,那么这些问题实例将是该语言的一些句子,这样就可以用“编译原理”中的解释器模式来实现了。虽然使用解释器模式的实例不是很多,但对于满足以上特点,且对运行效率要求不是很高的应用实例,如果用解释器模式来实现,其效果是非常好的,本文将介绍其工作原理与使用方法。四则运算问题通过解释器模式来实现四则运算,如计算a+b-c的值,具体要求如下:先输入表达式的形式,比如 a+b+c-d+e, .

2020-10-29 22:36:12 235

原创 设计模式之备忘录模式

备忘录模式每个人都有犯错误的时候,都希望有种“后悔药”能弥补自己的过失,让自己重新开始,但现实是残酷的。在计算机应用中,客户同样会常常犯错误,能否提供“后悔药”给他们呢?当然是可以的,而且是有必要的。这个功能由“备忘录模式”来实现。其实很多应用软件都提供了这项功能,如 Word、记事本、Photoshop、Eclipse 等软件在编辑时按 Ctrl+Z 组合键时能撤销当前操作,使文档恢复到之前的状态;还有在 IE 中的后退键、数据库事务管理中的回滚操作、玩游戏时的中间结果存档功能、数据库与操作系统的备

2020-08-19 08:34:23 138

原创 设计模式之中介者模式

中介者模式在现实生活中,常常会出现好多对象之间存在复杂的交互关系,这种交互关系常常是“网状结构”,它要求每个对象都必须知道它需要交互的对象。例如,每个人必须记住他(她)所有朋友的电话;而且,朋友中如果有人的电话修改了,他(她)必须告诉其他所有的朋友修改,这叫作“牵一发而动全身”,非常复杂。如果把这种“网状结构”改为“星形结构”的话,将大大降低它们之间的“耦合性”,这时只要找一个“中介者”就可以了。如前面所说的“每个人必须记住所有朋友电话”的问题,只要在网上建立一个每个朋友都可以访问的“通信录”就解决了

2020-08-07 08:28:07 219

原创 设计模式之观察者模式

观察者模式在现实世界中,许多对象并不是独立存在的,其中一个对象的行为发生改变可能会导致一个或者多个其他对象的行为也发生改变。例如,某种商品的物价上涨时会导致部分商家高兴,而消费者伤心;还有,当我们开车到交叉路口时,遇到红灯会停,遇到绿灯会行。这样的例子还有很多,例如,股票价格与股民、微信公众号与微信用户、气象局的天气预报与听众、小偷与警察等。在软件世界也是这样,例如,Excel 中的数据与折线图、饼状图、柱状图之间的关系;MVC 模式中的模型与视图的关系;事件模型中的事件源与事件处理者。所有这些,如果

2020-07-14 23:32:07 229

原创 设计模式之迭代器模式

迭代器模式在现实生活以及程序设计中,经常要访问一个聚合对象中的各个元素,如“数据结构”中的链表遍历,通常的做法是将链表的创建和遍历都放在同一个类中,但这种方式不利于程序的扩展,如果要更换遍历方法就必须修改程序源代码,这违背了 “开闭原则”。既然将遍历方法封装在聚合类中不可取,那么聚合类中不提供遍历方法,将遍历方法由用户自己实现是否可行呢?答案是同样不可取,因为这种方式会存在两个缺点:暴露了聚合类的内部表示,使其数据不安全 增加了客户的负担“迭代器模式”能较好地克服以上缺点,它在客户访问类与聚

2020-07-03 00:04:31 270

原创 设计模式之访问者模式

访问者模式在现实生活中,有些集合对象中存在多种不同的元素,且每种元素也存在多种不同的访问者和处理方式。例如,公园中存在多个景点,也存在多个游客,不同的游客对同一个景点的评价可能不同;电影或电视剧中的人物角色,不同的观众对他们的评价也不同;还有顾客在商场购物时放在“购物车”中的商品,顾客主要关心所选商品的性价比,而收银员关心的是商品的价格和数量。这些被处理的数据元素相对稳定而访问方式多种多样的数据结构,如果用“访问者模式”来处理比较方便。访问者模式能把处理方法从数据结构中分离出来,并可以根据需要增加新的

2020-06-23 08:32:20 308

原创 设计模式之命令模式

命令模式智能生活项目需求具体的需求:我们买了一套智能家电,有照明灯、风扇、冰箱、洗衣机,我们只要在手机上安装app就可以控制对这些家电工作 这些智能家电来自不同的厂家,我们不想针对每一种家电都安装一个App,分别控制,我们希望只要一个app就可以控制全部智能家电 要实现一个app控制所有智能家电的需要,则每个智能家电厂家都要提供一个统一的接口给app调用,这时就可以考虑使用命令模式 命令模式可将“动作的请求者”从“动作的执行者”对象中解耦出来 在我们的例子中,动作的请求者是手机app,动

2020-06-16 08:22:54 374

原创 设计模式之模板方法模式

模板方法模式在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,可以延迟到子类中实现。这样的例子在生活中还有很多,例如,一个人.

2020-06-11 08:39:35 309

原创 设计模式之代理模式

代理模式在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象。例如,购买火车票不一定要去火车站买,可以通过 12306 网站或者去火车票代售点买。又如找女朋友、找保姆、找工作等都可以通过找中介完成。在软件设计中,使用代理模式的例子也很多,例如,要访问的远程对象比较大(如视频或大图像等),其下载要花很多时间。还有因为安全原因需要屏蔽客户端直接访问真实对象,如某单位的内部数据库等。代理模式的基本介绍基本介绍:代理模式:为一个对象提供一个

2020-06-10 23:31:38 246

原创 设计模式之享元模式

享元模式在面向对象程序设计过程中,有时会面临要创建大量相同或相似对象实例的问题。创建那么多的对象将会耗费很多的系统资源,它是系统性能提高的一个瓶颈。例如,围棋和五子棋中的黑白棋子,图像中的坐标点或颜色,局域网中的路由器、交换机和集线器,教室里的桌子和凳子等。这些对象有很多相似的地方,如果能把它们相同的部分提取出来共享,则能节省大量的系统资源,这就是享元模式的产生背景。展示网站项目需求示例小型的外包项目团队,给客户 A 做一个产品展示网站,客户 A 的朋友 B 感觉效果不错,也希望做一个这样的产品

2020-06-03 23:25:54 198

原创 设计模式之外观模式

外观模式影院管理项目我们先举现实中一个家庭影院的例子:DVD播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的功能,其过程为:直接用遥控器:统筹各设备开关• 开爆米花机• 放下屏幕• 开投影仪• 开音响• 开DVD,选dvd• 去拿爆米花• 调暗灯光• 播放• 观影结束后,关闭各种设备传统方式解决影院管理传统方式解决影院管理问题分析在ClientTest 的main方法中,创建各个子系统的对象,并直接去调用子系统(对象)

2020-05-28 23:55:56 408

原创 设计模式之组合模式

组合模式看一个学校院系展示需求编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。如图:传统方案解决学校院系展示,如图:传统方案解决学校院系展示存在的问题分析:将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的 实际上我们的要求是:在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系,因此这种方案,不能很好实现的管理的操作,比如对学院、系的添加,删除,遍历等 解决

2020-05-26 23:13:45 369

原创 设计模式之装饰者模式

装饰者模式现在有这样一个项目,星巴克咖啡订单项目:咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡) 调料:Milk、Soy(豆浆)、Chocolate 要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便 使用OO的来计算不同种类咖啡的费用:客户可以点单品咖啡,也可以单品咖啡+调料组合方案一(较差):方案一问题分析:Drink 是一个抽象类,表示饮料 des就是对咖啡的描述,比如咖啡的名

2020-05-21 22:40:55 192

原创 设计模式之桥接模式

桥接(Bridge)模式先举个现实生活中的例子,现在对不同手机类型的不同品牌实现操作编程(比如:开机、关机、上网、打电话等),如图:如果用传统方式如何解决呢?我们可以看到,使用传统方式解决手机操作问题会存在下列问题:扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各个品牌手机的类,同样如果我们增加 一个手机品牌,也要在各个手机样式类下增加 违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这样增加了代码维护成本 解决方案——使用桥接模式.

2020-05-13 00:30:48 433

原创 IDEA中Maven Projects里项目灰色解决办法

如图所示:dcgame_admin为灰色原因分析:会出现这种情况的原因是不小心忽略了 maven 项目的模块,需要把忽略的 ignore files 取消选中,不再忽略解决办法:settings → maven → ignoreed files,把 maven project 里灰色项目对应的 ignore files 取消选中就OK了...

2020-04-22 18:28:22 6607

原创 设计模式之适配器模式

适配器模式泰国插座用的是两孔的(欧标),可以买个多功能转换插头 (适配器) ,这样就可以使用了。基本介绍:适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper) 适配器模式属于结构型模式 主要分为三类:类适配器模式、对象适配器模式、接口适配...

2020-04-22 01:59:00 234

原创 设计模式之建造者模式

建造者模式在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。例如,计算机是由OPU、主板、内存、硬盘、显卡、机箱、显示器、键盘、鼠标等部件组装而成的,采购员不可能自己去组装计算机,而是将计算机的配置要求告诉计算机销售公司,计算机销售公司安排技术人员去组装计算机,然后再交给要买计算机的采购员。生活中这样的例子很多,如游戏中的不同角色,其性别、个性、能...

2020-04-14 23:44:26 201

原创 设计模式之原型模式

原型模式基本介绍: 原型模式(Prototype模式)是指:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象 原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节 工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建,即:对象.clone() ...

2020-04-14 01:06:54 536

原创 设计模式之工厂模式

工厂模式基本介绍: 工厂模式的意义就是将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目的依赖关系的解耦。从而提高项目的扩展和维护性 三种工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式) 设计模式的依赖抽象原则 创建对象实例时,不要直接 new 类,而是把这个 new 类的动作放在一个工厂的方法中,并返回。有的书上说,变量不要直接持有具...

2020-04-12 01:37:44 273

原创 设计模式之单例模式

设计模式介绍:设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验,模式不是代码,而是某类问题的通用解决方案,设计模式(Design pattern)代表了最佳的实践。这些解决方案是众多软件开发人员经过相当长的 一段时间的试验和错误总结出来的 设计模式的本质提高软件的维护性,通用性和扩展性,并降低软件的复杂度 <<设计模式>> 是经典的书,作者是 Eri...

2020-04-02 09:59:54 173

原创 设计模式七大原则之合成复用原则

合成复用原则(Composite Reuse Principle)基本介绍:原则是尽量使用合成/聚合的方式,而不是使用继承设计原则核心思想找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起 针对接口编程,而不是针对实现编程 为了交互对象之间的松耦合设计而努力本系列完全参考韩顺平老师讲解的Java设计模式课程,仅做课后总结复习使用。...

2020-04-01 09:16:51 433

原创 设计模式七大原则之迪米特法则

迪米特法则(DemeterPrinciple)基本介绍: 一个对象应该对其他对象保持最少的了解 类与类关系越密切,耦合度越大 迪米特法则(DemeterPrinciple)又叫最少知道原则,即一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了提供的 public 方法,不对外泄露任何信息 迪米特法则...

2020-03-31 09:39:27 283

原创 设计模式七大原则之开闭原则

开闭原则基本介绍:开闭原则(OpenClosedPrinciple)是编程中最基础、最重要的设计原则 一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方)。用抽象构建框架,用实现扩展细节 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化 编程中遵循其它原则,以及使用设计模式的目的就是遵循开闭原则代码示例1:...

2020-03-31 09:09:38 285

原创 设计模式七大原则之里氏替换原则

里氏替换原则首先,OO (Object Oriented:面向对象)中的继承性的思考和说明: 继承包含这样一层含义:父类中凡是已经实现好的方法,实际上是在设定规范和契约,虽然它不强制要求所有的子类必须遵循这些契约,但是如果子类对这些已经实现的方法任意修改,就会对整个继承体系造成破坏 继承在给程序设计带来便利的同时,也带来了弊端。比如使用继承会给程序带来侵入性,程序的可移植性降低...

2020-03-30 09:57:18 794

原创 设计模式七大原则之依赖倒转原则

一、依赖倒转原则(Dependence Inversion Principle)基本介绍: 高层模块不应该依赖低层模块,二者都应该依赖其抽象 抽象不应该依赖细节,细节应该依赖抽象 依赖倒转(倒置)的中心思想是面向接口编程 依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。在 ja...

2020-03-27 09:38:16 229

原创 设计模式七大原则之接口隔离原则

一、接口隔离原则(Interface Segregation Principle)基本介绍:客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。(最小可理解为最精确,比如说类A只会使用Interface1中方法1、2、3,多出来的方法4、5就导致了不是最精确的接口,所谓精确也就是说要不多不少正正好。)UML图示例:(类A和类C依赖Interface1中的方法,类...

2020-03-27 09:03:26 283

原创 设计模式七大原则之单一职责原则

一、设计模式的目的:编写软件过程中,程序员面临来自耦合性,内聚性,可维护性,可扩展性,重用性,灵活性等多方面的挑战,设计模式是为了让程序(软件),具有更好的: 代码重用性 (即:相同功能的代码,不用多次编写) 可读性 (即:编程规范性, 便于其他程序员的阅读和理解) 可扩展性 (即:当需要增加新的功能时,非常的方便,称为可维护) 可靠性 (即:当我们增加...

2020-03-26 10:16:29 594

原创 ab(apach bench)压力测试使用教程

第一步:下载安装这里只说Windows环境,进入官网:https://www.apachehaus.com/cgi-bin/download.plx如下图所示:(根据自己需求下载)下载完成后,解压文件夹,我是解压到D盘的。第二步:开始使用哈哈,第二步就开始使用了是不是很简单。使用win+r打开window自带的cmd控制台,点击确定然后进入到ab压力测试工具的bin...

2019-12-10 15:35:11 672

原创 虚拟专用服务器、云服务器、虚拟主机、物理服务器的含义与区别

物理服务器:一台实实在在物理机,服务器性能和稳定性比普通PC强,但是价格昂贵,一般有钱的大佬才会使用独立的物理服务器(就是需要自己实实在在买一台设备放在那里)。性能强,但是无论用还是不用,机器和网络等成本都在那里。虚拟专用服务器:Virtual Private Server 虚拟专用服务器,由于有很多的物理服务器其实使用率很低,平均cpu的使用率在20%以下。于是就将一台物理服务...

2019-09-05 12:00:19 3289

转载 史上最清楚讲解:有return的情况下try catch finally的执行顺序(看完不懂算我输!)

首先,直接说结论:(一定要看举例和测试程序!)1、不管有木有出现异常,finally块中代码都会执行;2、当try和catch中有return时,finally仍然会执行;3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,不管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在fina...

2019-07-25 16:03:44 393

转载 深入浅出SOA!

SOA是什么?SOA全英文是Service-Oriented Architecture,中文意思是中文面向服务编程,是一种思想,一种方法论,一种分布式的服务架构(具体可以百度)。 用途:SOA解决多服务凌乱问题,SOA架构解决数据服务的复杂程度,同时SOA又有一个名字,叫做服务治理。 通过一个系统我们看一下架构的演变过程(由统一到分布式): 当我...

2019-07-16 15:28:10 136

转载 Java日志框架那些事儿,弄清Java日志体系

在项目开发过程中,我们可以通过 debug 查找问题。而在线上环境我们查找问题只能通过打印日志的方式查找问题。因此对于一个项目而言,日志记录是一个非常重要的问题。因此,如何选择一个合适的日志记录框架也非常重要。在Java开发中,常用的日志记录框架有JDKLog、Log4J、LogBack、SLF4J。这些日志记录框架各有各的特点,各有各的应用场景。了解这些框架的特点及应用场景,有利于我们做技术...

2019-06-12 16:25:26 189

原创 Java变量详解

Java语言支持的变量类型有:类变量:独立于方法之外的变量,用 static 修饰。 实例变量:独立于方法之外的变量,不过没有 static 修饰。 局部变量:类的方法中的变量。public class BianLiang { static int leibianliang = 0; // 类变量 String shilibianl...

2019-06-05 11:32:12 268

原创 JUC多线程及高并发:对volatile的理解

一、volatile是什么?volatile是Java虚拟机提供的轻量级(乞丐版synchronized)的同步机制(synchronized是重量级)PS:杀鸡不用宰牛刀,synchronized轻易不要使用,每次只能跑一个线程效率太低。volatile三大特性:1、保证可见性2、不保证原子性(因为不保证原子性,所以为轻量级)3、禁止指令重排Java代码演示vo...

2019-05-24 11:07:40 365

转载 深入理解数字签名、数字证书及加密算法工作原理,超级通俗易懂的例子!

数字签名是什么?1.鲍勃有两把钥匙,一把是公钥,另一把是私钥。2.鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。3.苏珊给鲍勃写信,写完后用鲍勃的公钥加密,达到保密的效果。4.鲍勃收信后,用私钥解密,看到信件内容。5.鲍勃给苏珊回信,写完后用Hash函数,生成信件的摘要(digest)。6.然后,鲍勃使用私...

2019-04-11 10:30:49 1163

原创 各种主流加密算法解析

最近开始做金融项目,接触了加密算法,在这里做个总结,加深认识。目前比较常用的加密算法总结起来就是单向加密和双向加密了,很少对吧,理解起来也不算很难。什么是单向加密?通俗来说,就是通过对数据进行摘要计算生成密文,密文不可逆推还原。算法代表:MD5、SHA、MAC、CRC等。什么是双向加密?而双向加密算法,与单向加密正好相反,就是可以把密文逆推还原成明文,双向加密又分为对称加密和非...

2019-04-10 19:10:08 3697

原创 IDEA intellij maven项目打包报错Please ensure you are using JDK 1.4 or above and not a JRE解决方法!

在使用intellij打包maven项目时报以下异常:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project com.xxx: Compilation failureUnable to locate the Javac C...

2019-03-28 16:36:36 3077 1

空空如也

空空如也

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

TA关注的人

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