自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代理模式 —— Proxy Pattern

代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,所访问的真实对象与代理对象需要实现相同的接口。根据代理模式的使用目的不同,代理模式又可以分为多种类型,例如保护代理、远程代理、虚拟代理、缓冲代理等,它们应用于不同的场合,满足用户的不同需求。代理模式:给某一个对象提供一个代理或占位符,并由代理对象来控制对...

2021-03-01 11:22:05 120

原创 享元模式-Flyweight Pattern

享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式,它是一种对象结构型模式。享元模式以共享的方式高效地支持大量细粒度对象的重用,享元对象能做到共享的关键是区分了内部状态(Intrinsic State)和...

2019-12-18 15:44:00 165

原创 外观模式-Facade Pattern

外观模式中,一个子系统的外部与其内部的通信通过一个统一的外观类进行,外观类将客户类与子系统的内部复杂性分隔开,使得客户类只需要与外观角色打交道,而不需要与子系统内部的很多对象打交道。外观模式:为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式结构示意图外观模式包含如下两个角色:(1) Facade(外观角色):在客户...

2019-12-05 16:46:20 139

原创 装饰模式-Decorator Pattern

装饰模式-Decorator Pattern装饰模式定义装饰模式定义装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为,装饰模式是一种用于替代继承的技术,它通过一种无须定义子类的方式来给对象动态增加职责,使用对象之间的关联关系取代类之间的继承关系。在装饰模式中引入了装饰类,在装饰类中既可以调用待装饰的原有类的方法,还可以增加新的方法,以扩充原有类的功能。装饰模式(Decora...

2019-12-05 15:57:19 131

原创 组合模式-Composite Pattern

组合模式(Composite Pattern):组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又可以称为“整体—部分”(Part-Whole)模式,它是一种对象结构型模式。组合模式结构图在组合模式结构图中包含如下几个角色:● Component(抽象构件):它可以是接口或抽象类,为叶子构...

2019-10-28 16:39:31 208 1

原创 桥接模式-Bridge Pattern

桥接模式是一种很实用的结构型设计模式,如果软件系统中某个类存在两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展,让系统更加符合“单一职责原则”。与多层继承方案不同,它将两个独立变化的维度设计为两个独立的继承等级结构,并且在抽象层建立一个抽象关联,该关联关系类似一条连接两个独立继承结构的桥,故名桥接模式。桥接模式用一种巧妙的方式处理多层继承存在的问题,用抽象关联取代了传...

2019-10-25 17:08:36 161

原创 适配器模式——Adaptor Pattern

适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。在适配器模式中,我们通过增加一个新的适配器类来解决接口不兼容的问题,使得原本没有任何关系的类可以协同工作。根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适配器两种,在...

2019-10-25 15:34:08 306

原创 六个创建模式——建造者模式

建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。...

2019-09-12 15:14:47 197

原创 六个创建模式——原型模式

原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式的工作原理:将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝自己来实现创建过程。由于在软件系统中我们经常会遇到需要创建多个相同或者相似对象的情况,因此原型模式在真实开发中的使用频率还是非常高的。原型模式是一种“另类”的创建型模式,创建克隆对象...

2019-09-12 14:37:22 161

原创 六个创建模式——单例模式——确保对象的唯一性

确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。单例模式是一种对象创建型模式。单例模式有三个要点:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。单例模式之——饿汉模式:当类被加载时,静态变量instance会被初始化,此时类的私有构造函数会被调用,单例类的唯一实例将被创建cl...

2019-08-28 17:36:05 291

原创 六个创建模式——抽象工厂模式

抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品。抽象工厂模式定义如下:抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,它是一种对象创建型模式。在抽象工厂模式中,每一个具体工厂都提供了多个工厂...

2019-08-02 14:35:02 89

原创 六个创建模式——工厂方法模式

工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。工厂方法模式又简称为工厂模式(Factory Pattern),又可称作虚拟构造器模式(Virtual Constructor Pattern)或多态工厂模式(Polymorphic Factory Pattern)。结构图示:...

2019-08-01 17:22:15 150

原创 六个创建模式——简单工厂模式

工厂模式是最常用的一类创建模式,通常我们所说的工厂模式是指工厂方法模式。简单工厂模式是工厂方法模式的“小弟”。简单工厂模式不属于GoF23经典模式,但通常将其作为学习其他工厂模式的基础。简单工厂模式基本流程:首先将需要创建的各种不同对象的相关代码封装到不同的类中,这些类称为具体产品类,而将它们公共的代码进行抽象和提取后封装在一个抽象产品类中,每一个具体产品类都是抽像产品类的子类;然后提供一个工...

2019-08-01 15:50:58 117

原创 7种常用的面向对象设计原则

设计原则名称 定义 使用频率单一职责原则 (Single Responsibility P...

2019-06-25 10:41:35 136

原创 设计模式前奏-模板

最近开始看设计模式,设计模式到底有什么用?1.设计模式来源众多专家的经验和智慧,它们是从许多优秀的软件系统中总结出的成功的。能够实现可维护性复用的设计方案,使用这些方案将可以让我们避免做一些重复性的工作,也许我们冥思苦想得到的一个“自以为很了不起”的设计方案其实就是某一个设计模式。在时间就是金钱的今天,设计模式无疑会为有助于我们提高开发和设计效率,但它不保证一定会提高。2.设计模式提供了一...

2019-06-21 16:09:55 94

原创 Clean Code(代码整洁之道)-并发编程

并发是一种解耦策略,它帮我们把做什么(目的)和何时做(时机)分开。解耦的目的和时机能明显改进应用程序的吞吐量和结构。并发的迷思与误解: 1).并发总能改进性能:并发有时能改进性能,但只在多个线程或多个处理器之间能分享大量等待时间的时候管用。 2).编写并发程序无需修改设计:并发设计的算法和单线程系统设计极为不同,目的与时机的解耦往往对系统结构产生巨大影响。...

2019-04-18 17:42:22 230

原创 Clean Code(代码整洁之道)-类

1.类的组织:遵循标准Java约定,类应从一组变量开始。如果有公共静态常量,应先出现,然后是私有静态变量、私有实体变量。公共函数应在变量列表后面,私有函数紧跟其调用者函数。2.类应该短小:对于函数,我们通过行数计算大小,而对于类,则通过权责来计算其大小。类的名称应当描述其权责,类名越模糊,该类越有可能拥有太多权责。  1).单一权责(SRP):类或模块有且仅有一条加以修改的理由。鉴别权责(...

2019-02-27 15:29:30 527

原创 Clean Code(代码整洁之道)-单元测试

1.TDD三定律:    a).在编写不能通过的单元测试前,不可编写生产代码;    b).只可编写刚好无法通过的单元测试,不能编译也算不通过;    c).只可编写刚好足以通过当前失败测试的生产代码;2.保持测试整洁:覆盖了生产代码的自动化单元测试代码应该保持设计和架构的整洁,否则改进自己代码的能力将有所牵制。3.整洁的测试   整洁测试的三要素:可读性、可读性、可读性!...

2019-02-26 11:01:38 699

原创 Clean Code(代码整洁之道)-边界

1.使用第三方代码:使用第三方代码时,如果有边界接口,可将其保留在类或近亲中,避免从公共API中返回边界接口,或者将其边界接口作为参数传给公共API.2.浏览和学习边界:在利用第三方程序包时,没有测试第三方代码的职责,但为要使用的第三方代码编写测试,可能最符合我们的利益。不要在生成代码中实验新东西,而是编写测试来遍览和理解第三方代码。3.学习log4j4.学习性测试的好处不只是免费:学...

2019-02-22 15:20:51 374

原创 Clean Code(代码整洁之道)-错误处理

1.对错误返回的处理,使用异常而不要使用返回码。2.先写try-catch-finally语句。尝试编写强行抛异常的测试,再往处理器中添加行为,使之满足测试要求。(TDD)3.使用不可控异常4.给出异常发生的环境说明5.依调用者需要定义异常类6.定义常规流程,比如除了抛异常外,还可以用特例模式处理特殊情况,定义特殊类返回而不是抛异常7.别返回 null 值8.别传递 n...

2019-02-20 16:59:16 257

原创 Clean Code(代码整洁之道)-对象和数据结构

    对象与数据结构间的二分原理:过程式代码(使用数据结构的代码)便于在不改变数据结构的前提下添加新函数,面向对象代码便于在不改变既有函数的前提下添加新类;    1.1.德墨忒尔律:模块不应了解他所操作对象的内部情形。类C的方法 f 只应该调用一下对象的方法:    1).  C;2). 由f 创建的对象;3).作为参数传递给 f 的对象;4).由C的实体变量持有的对象。    方...

2019-02-20 15:35:01 263

原创 Use DirtiesContext Annotation in Spring Boot Test

This is working as designed. Spring Framework's test framework will, by default, cache contexts for possible reuse by multiple test classes. You have two tests with different configuration (due to @Te...

2019-02-15 15:32:30 294

原创 Clean Code(代码整洁之道)-格式

    代码格式很重要,代码的格式和可读性会影响代码的可维护性和可扩展性,开发团队应统一代码格式,采用同一套简单的代码规则。1.垂直格式:  1.1).向报纸学习:源文件应像报纸一样,从上到下阅读,简洁明了。最顶部给出最高层次的概念和算法,向下依次展开,直到找到最底层的函数和细节;  1.2).概念间垂直方向上的区隔:逻辑块之间可以加空行相互区隔开,让代码看起来更直观;  1.3)...

2019-02-12 17:06:41 516

原创 Clean Code(代码整洁之道)-注释

注释的恰当用法是弥补我们在用代码表达意图是遭遇的失败。注释并不“纯然的好”,若代码有足够的表达力,则根本不需要注释。1.注释不能美化代码:与其花时间编写解释糟糕代码的注释,不如花时间整理糟糕的代码。2.用代码阐述:写注释前思考一下可否用函数来替代该注释,函数名称可体现相同的意义。3.好注释:有些注释是必须的,也是有力的。  3.1).法律信息:公司代码规范要求编写与法律有关的注释,...

2019-01-23 17:02:52 363

原创 Clean Code(代码整洁之道)-函数

1.短小:函数第一要则就是短小;            代码块和缩进:if\else\while等语句,其中的代码块应该只有一行,该行大抵相当于一个函数调用。这样不但能保持函数短小,而且因为函数的名称拥有较具说明性的名称,增加了文档上的价值。2.只做一件事:函数应该只做一件事,做好一件事。3.每个函数一个抽象层级:遵循向下规则:自顶向下读代码;4.switch语句:对于switch...

2019-01-23 13:49:17 424

原创 Clean Code(代码整洁之道)-有意义的命名

1.名副其实:不取含义模糊的命名,拒绝魔术数;2.避免误导:避免留下掩藏代码本意的线索,避免使用与本意相悖的词;3.做有意义的区分:同意作用范围内的两样不同的东西命名不要重名,不要只是添加数字作为区分,使用有确定含义的词来命名;4.使用读得出来的名称;5.使用可搜索的名称:长名称胜于短名称,搜得到的名称胜于自造编码写就的名称;单字母名称用于短方法中的本地变量,名称长短应与其作用域相...

2019-01-08 17:38:31 274

原创 RabbitMq记录

2.对于同一个queue的定义,所有引用方需要有相同的配置(命名,参数)才行,否则会报错:inequivalent arg 'x-expires'for queue '0d8118c5bae241919a4d991ec65db1a8' in vhost 'cg'...

2018-03-09 11:21:05 255

翻译 java8 并行流: parallel stream – 串行(sequential )和并行流(parallel stream)处理的性能比较

https://blog.oio.de/2016/01/22/parallel-stream-processing-in-java-8-performance-of-sequential-vs-parallel-stream-processing/

2018-01-25 17:03:00 4793

原创 JAVA基础篇巩固

1.关键字final表示变量只能被赋值一次,赋值之后就不能修改了2.整数被0除会产生异常,而浮点数被0除将会得到无限大或NAN3.>>>用0填充高位,>>用符号位填充高位,没有4.数值类型之间的转换5.强转类型可能造成精度丢失,或者转成完全不同的值,(byte)300实际结果为446.switch case标签的值类型可以是char、byte、short、int、String、

2017-06-02 14:49:52 239

转载 前端性能优化

常见的web性能优化方法前端性能优化----yahoo前端性能团队总结的35条黄金定律

2017-03-31 10:41:50 177

原创 抛个关于nginx下载文件乱码的问题

今天做项目,需要下载pdf文件,要显示中文名字,比如:服务协议.pdf前端页面的请求是:localhost/test/test.pdf?n=服务协议test.pdf放在nginx上nginx添加如下配置:location ~* /test.+\.pdf {                root  /var/www/html/ ;                add_he

2017-03-16 18:05:17 4712

转载 nginx 常见参数以及重定向参数配置

nginx 各参数翻译,作用$arg_PARAMETER #这个变量包含GET请求中,如果有变量PARAMETER时的值。$args #这个变量等于请求行中(GET请求)的参数,例如foo=123&bar=blahblah;$binary_remote_addr #二进制的客户地址。$body_bytes_sent #响应时送出的body字节数数量。即使连接中断,这个数据也是精

2017-03-16 17:51:42 293

原创 Edge浏览器自动给数字加下划线

edge浏览器自动会给比较长的数字加上下划线效果,如图:但很多时候这并不是我们想要的效果,去掉这个下划线,可以在head里面添加如下meta头

2017-03-13 15:47:56 5946

原创 mysql启动错误

发生系统错误2,找不到指定文件原因:安装mysql服务时目录不对,要在mysql的安装目录下的bin路径下执行:mysqld --install若之前有安装服务,需要先执行mysql --remove,然后在mysql  --install,执行完后可以看到Service successfully installed.的提示服务启动之后,执行mysql,提示:ERROR 200

2017-03-07 21:56:48 324

空空如也

空空如也

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

TA关注的人

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