设计模式
茅坤宝骏氹
语言:Java、C/C++、C#、Python、Linux Shell。
框架:Spring、Spring MVC、Spring Boot、Spring Cloud、Hibernate、Mybatis、Freemarker、Velocity。
前端:HTML5、CSS3、JavaScript、Bootstrap、JQuery、Vue、React。
数据库:oracle、mysql、MongoDB、HBase。
缓存:Memcache、Redis。
消息队列:kafka。
大数据:Hadoop、Hive、Sqoop、Flume、Spark、Strom、OpenTSDB、Druid。
展开
-
这些Spring中的设计模式,你都知道吗?
转载自这些Spring中的设计模式,你都知道吗?设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆。Spring作为业界的经典框架,无论是在架构设计方面,还是在代码编写方面,都堪称行内典范。好了,话不多说,开始今天的内容。spring中常用的设计模式达到九种,我们举例说明:第一种:简单工厂又叫做静态工厂方法(StaticFac...转载 2018-09-25 19:38:41 · 206 阅读 · 0 评论 -
设计模式之静态代理模式实战
转载自 设计模式之静态代理模式实战静态代理模式很简单,代理类和实现类都实现相同的接口,然后通过代理类来调用实现类的方法。如我们想保存用户信息之前打印用户信息,或者保存用户信息之后把这些信息缓存下来,即在运行方法前后插入执行一个别的操作,下面是一个简单的示例。用户接口public interface UserInterface { boolean saveUser(User user);}用户...转载 2018-05-06 14:31:32 · 207 阅读 · 0 评论 -
设计模式之单例模式实践
转载自 设计模式之单例模式实践概念单例模式即一个JVM内存中只存在一个类的对象实例分类1、懒汉式类加载的时候就创建实例2、饿汉式使用的时候才创建实例当然还有其他的生成单例的方式,双重校验锁,枚举和静态内部类,文中会有介绍实践懒汉式1)线程不安全,不可用public class Singleton { private static Singleton instance; priv...转载 2018-05-06 14:32:22 · 212 阅读 · 0 评论 -
单例模式懒汉、饿汉和登记
转载自 JAVA设计模式之单例模式本文继续介绍23种设计模式系列之单例模式。概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。 单例模式有以下特点: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 单例模式确保某个类只有一个实例,而且自行实例化并...转载 2018-04-14 00:21:19 · 193 阅读 · 0 评论 -
设计模式
转载自 Java之美[从菜鸟到高手演变]之设计模式 设计模式(Design Patterns) ——可复用面向对象软件的基础设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式...转载 2018-04-14 00:10:49 · 198 阅读 · 0 评论 -
漫画:什么是单例设计模式
转载自 永远爱大家的 程序员小灰————— 第二天 —————单例模式第一版:转载 2018-04-13 23:57:07 · 225 阅读 · 0 评论 -
装饰器模式和代理模式的区别
转载自 装饰器模式和代理模式的区别 学习AOP时,教材上面都说使用的是动态代理,可是在印象中代理模式一直都是控制访问什么的,怎么又动态增加行为了,动态增加行为不是装饰器模式吗?于是找了很多资料,想弄清楚这两者之间到底有什么区别。结果发现这一篇英文文章讲的很清晰,就翻译一下,供参考。 首先,让我们先看一下下面的这两个UML类图,他们分别描述了装饰器模式和代理模式的基本实现...转载 2018-04-15 21:20:01 · 1199 阅读 · 0 评论 -
命令模式的两种不同实现
转载自 命令模式(Command)的两种不同实现命令模式(Command):将一个请求封装成一个对象,使得你用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。 命令模式,顾名思义来理解即可,就是客户端发布一个命令(也就是“请求”),而这个命令是已经被封装成一个对象的。即这个命令对象的内部可能已经指定了该命令具体被谁负责执行。就像开发经理从客户那边获取对方的需求(...转载 2018-04-15 21:17:21 · 510 阅读 · 0 评论 -
命令模式
转载自 命令模式(Command Pattern)(一):命令模式介绍一、意图 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。二、适用性(1)系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。(2)在不同的时刻指定、排列和执行请求。(3)支持修改日志、撤销操作。(4)系统需要将一组操作组合...转载 2018-04-15 21:14:27 · 185 阅读 · 0 评论 -
设计模式之动态代理模式实战
转载自 设计模式之动态代理模式实战昨天分享了静态代理的概念及存在的缺点,所以今天讲的动态代理模式十分重要。动态代理在我们工作当中应用相当广泛,如Srping AOP就是动态代理的在开源框架的比较出名的应用。动态代理有两种试,一是通过JDK自带的API实现动态代理,二是通过别的字节码框架实现,如cglib。需要注意的是JDK只能针对接口实现动态代理,不能代理普通类,使用具有局限性。而cglib可以代...转载 2018-05-05 09:55:43 · 255 阅读 · 0 评论 -
为什么我强烈建议大家使用枚举来实现单例
转载自 为什么我墙裂建议大家使用枚举来实现单例关于单例模式,我的博客中有很多文章介绍过。作为23种设计模式中最为常用的设计模式,单例模式并没有想象的那么简单。因为在设计单例的时候要考虑很多问题,比如线程安全问题、序列化对单例的破坏等。单例相关文章一览:设计模式(二)——单例模式设计模式(三)——JDK中的那些单例单例模式的七种写法深度解析单例与序列化之间的爱恨情仇...转载 2018-07-04 09:28:18 · 10826 阅读 · 2 评论 -
单例模式的七种写法
转载自 单例模式的七种写法第一种(懒汉,线程不安全):public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) {...转载 2018-07-04 09:28:09 · 189 阅读 · 0 评论 -
Mybatis 使用的 9 种设计模式,真是太有用了
转载自Mybatis 使用的 9 种设计模式,真是太有用了虽然我们都知道有26个设计模式,但是大多停留在概念层面,真实开发中很少遇到,Mybatis源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应用,能够更深入的理解设计模式。Mybatis至少遇到了以下的设计模式的使用: Builder模式,例如SqlSessionFactoryBuilder、XMLConfigBu...转载 2019-04-27 13:45:47 · 1070 阅读 · 0 评论 -
面象对象设计6大原则之一:单一职责原则
转载自 面象对象设计6大原则之一:单一职责原则单一职责原则(SRP),The Single Responsibility Principle定义一个类的修改只能有一个被修改的原因。通俗地讲,就是一个类只能负责一个职责,修改一个类不能影响到别的功能,也就是说只有一个导致该类被修改的原因。我们写代码的都知道尽量要做到低耦合、高内聚的特性,单一职责原则正是保证了类与类之间的低耦合性。一个类如果承担过多的...转载 2018-05-05 09:53:26 · 162 阅读 · 0 评论 -
面象对象设计6大原则之二:开放封闭原则
转载自 面象对象设计6大原则之二:开放封闭原则开放封闭原则(OCP),The Open Closed Principle定义一个软件的实体,包括类、方法、模块、应该对扩展开放,对修改关闭。也就是说一个软件的实体应该通过扩展的方式来修改变化,而不是修改已有实体源代码。开放封闭原则也是最基本需要遵守的原则,我们应该尽量保证系统的稳定性,我们在实现另外一个功能的时候不能修改之前已有的代码以免造成之前的功...转载 2018-05-05 09:53:40 · 236 阅读 · 0 评论 -
面象对象设计6大原则之三:里氏替换原则
转载自 面象对象设计6大原则之三:里氏替换原则里氏替换原则(LSP),The Liskov Substitution Principle定义所有引用基类的地方必须能透明地引用其子类的对象,即子类可以拓展父类的功能,但不能修改父类已有的功能。也就是说在父类出现的地方子类也可以出现,并且替换为子类也不会报错,引用者根本不需要知道引用的是父类还是子类,但是反过来就行不通了,子类出现的地方父类就不一定能出...转载 2018-05-05 09:53:48 · 208 阅读 · 0 评论 -
面象对象设计6大原则之四:接口隔离原则
转载自 面象对象设计6大原则之四:接口隔离原则接口隔离原则(ISP),The Interface Segregation Principle定义客户端不需要强迫依赖那些它们不需要的接口。类与接口的依赖应该建议在最小的接口上,也就是说接口应该最小化,不能建立在一个庞大的接口之上,接口合理地按功能职能分成更细的几个单一的子接口。如果一个接口定义并公布过多的方法,会导致所有的实现类必须要实现接口的方法,...转载 2018-05-05 09:53:58 · 146 阅读 · 0 评论 -
面象对象设计6大原则之五:依赖倒置原则
转载自 面象对象设计6大原则之五:依赖倒置原则依赖倒置原则(DIP),The Dependency Inversion Principle定义1、高层模块不应该依赖低层模块,两都应该依赖于抽象。2、抽象不依赖于具体细节。3、具体细节应该依赖于抽象。抽象就是指接口或者抽象类,细节是指实现接口或者抽象类的具体实现类。也就是说模块之间的依赖通过接口或抽象发生的,两个实现细节之间不能直接发生依赖,接口不能...转载 2018-05-05 09:54:08 · 164 阅读 · 0 评论 -
面象对象设计6大原则之六:迪米特原则
转载自 面象对象设计6大原则之六:迪米特原则迪米特原则(LOD),The Law Of Demeter,也称为最少知识原则定义一个对象应该对其他对象有最少的了解。也就是说一个类耦合和调用一个类应该知道的最少,它只关心被耦合和调用的类的公共方法,而被耦合和调用的类如何复杂它并不关心。这在另一程度也说明类方法的最小权限性,不要随意定义public公开方法,你只公开你需要公开的。迪米特原则对类的低耦合度...转载 2018-05-05 09:54:54 · 139 阅读 · 0 评论 -
模版方法模式
转载自 23种设计模式(6):模版方法模式定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤。类型:行为类模式类图: 事实上,模版方法是编程中一个经常用到的模式。先来看一个例子,某日,程序员A拿到一个任务:给定一个整数数组,把数组中的数由小到大排序,然后把排序之后的结果打印转载 2018-04-14 23:21:42 · 124 阅读 · 0 评论 -
备忘录模式
转载自 23种设计模式(15):备忘录模式定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态类型:行为类类图: 我们在编程的时候,经常需要保存对象的中间状态,当需要的时候,可以恢复到这个状态。比如,我们使用Eclipse进行编程时,假如编写失误(例如不小心误删除了几行代码),我们希望返回删除前的状态,便可以使用Ct...转载 2018-04-15 21:11:46 · 134 阅读 · 0 评论 -
状态模式
转载自 状态模式在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。介绍意图:允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。主要解决:对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。何时使用:...转载 2018-04-15 21:09:02 · 126 阅读 · 0 评论 -
访问者模式
转载自 访问者模式在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。介绍意图:主要将数据结构与数据操作分离。主要解决:稳定的数据结构和易变的操作耦合问题。何时使用:需要对一个对象结构中...转载 2018-04-15 21:05:53 · 137 阅读 · 0 评论 -
装饰器模式(讲解+应用)
转载自 设计模式(5)装饰器模式(讲解+应用)目录装饰器模式为什么使用装饰器模式应用实例装饰器模式看到装饰器是在看《Thinking in Java》一书的时候,看到文件读写那边的时候,有提到装饰器模式,同时在文件读写的那一部分,对于各种读入,写出的方式,代码组织结构感觉也是比较怪的,怪的总是吸引人的。装饰器模式:在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装...转载 2018-04-14 22:51:31 · 558 阅读 · 0 评论 -
装饰器模式
转载自 装饰器模式(Decorator)1.认识装饰器模式 装饰模式能够实现动态的为对象添加功能,是从一个对象外部来给对象添加功能。通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生对应的子类来扩展,抑或是使用对象组合的方式。显然,直接修改对应的类这种方式并不可取。在面向对象的设计中,而我们也应该尽量使用对象组合,而不是对象继承来扩展和复用功能。装饰器模式就是基于对象组合的方式,可...转载 2018-04-14 22:49:55 · 123 阅读 · 0 评论 -
外观模式
转载自 设计模式(九)外观模式Facade(结构型)设计模式--外观模式Facade(结构型):1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性。例子1:一个电源总开关可以控制四盏灯、一个风扇、一台空调和一台电视机的启动和关闭。该电源总开关可以同时控制上述所有电器设备,电源总开关即为该...转载 2018-04-14 14:07:18 · 167 阅读 · 0 评论 -
原型模式
转载自 23种设计模式(5):原型模式定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。类型:创建类模式类图:原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件:实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clon...转载 2018-04-14 14:04:18 · 107 阅读 · 0 评论 -
创建者模式
转载自 设计模式之创建者模式创建者模式又叫建造者模式,是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。创建者模式通常包括如下几种角色:1.建造者角色(Builder)对复杂对象的创建过程加以抽象,给出一个抽象接口,以规范产品对象的各个组成部分的...转载 2018-04-14 14:02:35 · 250 阅读 · 0 评论 -
适配器模式
转载自 适配器模式(Adapter):类适配器、对象适配器适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。A d a p t e r 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适用场景:1、已经存在的类的接口不符合我们的需求;2、创建一个可以复用的类,使得该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作;3、在不对每一个都...转载 2018-04-14 14:00:13 · 93 阅读 · 0 评论 -
工厂模式
转载自 设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)被腾讯笔试打击到了,腾讯笔试的设计模式题目都没有做对过,所以我要学习下设计模式,就买了入门的《大话设计模式》这本书。 我从昨天下午开始看这本书,今天中午看完,发现这本书浅显易懂,作为入门读物还是不错的。 好脑子不如烂笔头,我还是将所学的东西记载下来,供我以后来看吧。 简单工厂模式 当需要加法类的时候,调...转载 2018-04-14 13:56:17 · 211 阅读 · 0 评论 -
单例模式的优与劣
转载自 大话设计模式(四)单例模式的优与劣前言首先来明确一个问题,那就是在某些情况下,有些对象,我们只需要一个就可以了,比如,一台计算机上可以连好几个打印机,但是这个计算机上的打印程序只能有一个,这里就可以通过单例模式来避免两个打印作业同时输出到打印机中,即在整个的打印过程中我只有一个打印程序的实例。简单说来,单例模式(也叫单件模式)的作用就是保证在整个应用程序的生命周期中,任何一个时刻,单例类的...转载 2018-04-14 13:34:35 · 191 阅读 · 0 评论 -
代理模式
转载自 代理模式(Proxy) 一、代理模式介绍代理模式:为其他对象提供一种代理以便控制对这个对象的访问。可以详细控制访问某个类(对象)的方法,在调用这个方法前作的前置处理(统一的流程代码放到代理中处理)。调用这个方法后做后置处理。例如:明星的经纪人,租房的中介等等都是代理代理模式分类:1.静态代理(静态定义代理类,我们自己静态定义的代理类。比如我们自己定义一个明星的经纪人类)2.动态代理(通过...转载 2018-04-14 22:53:57 · 120 阅读 · 0 评论 -
Java的三种代理模式
转载自 Java的三种代理模式1.代理模式代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法举个例子来说明代理的作用:假设我们想邀请一位明星,那么并不是直接...转载 2018-04-14 23:01:51 · 112 阅读 · 0 评论 -
桥接模式
转载自 设计模式读书笔记-----桥接模式 在开始学java的时候老师讲到继承的时候,总是喜欢用一个例子来讲解,那就是画图,这里有一个画笔,可以画正方形、长方形、圆形(这个大家都知道怎么做吧,我就不解释了)。但是现在我们需要给这些形状进行上色,这里有三种颜色:白色、灰色、黑色。这里我们可以画出3*3=9中图形:白色正方形、白色长方形、白色圆形。。。。。。到这里了我们几乎到知道了转载 2018-04-14 23:07:19 · 278 阅读 · 0 评论 -
解释器模式
转载自 23种设计模式(14):解释器模式定义:给定一种语言,定义他的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子。类型:行为类模式类图: 解释器模式是一个比较少用的模式,本人之前也没有用过这个模式。下面我们就来一起看一下解释器模式。 解释器模式的结构抽象解释器:声明一个所有具体表达式都要实现的抽象接口(或者抽象类),接口中主要是一个interpret()方法...转载 2018-04-15 21:04:14 · 139 阅读 · 0 评论 -
中介者模式
转载自 23种设计模式(7):中介者模式定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。类型:行为类模式类图:中介者模式的结构 中介者模式又称为调停者模式,从类图中看,共分为3部分: 抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信。一般包括一个或几个抽象的事件方法,并由子类去实现...转载 2018-04-15 20:59:14 · 137 阅读 · 0 评论 -
责任链模式
转载自 Java模式开发之责任链模式从击鼓传花谈起 击鼓传花是一种热闹而又紧张的饮酒游戏。在酒宴上宾客依次坐定位置,由一人击鼓,击鼓的地方与传花的地方是分开的,以示公正。开始击鼓时,花束就开始依次传递,鼓声一落,如果花束在某人手中,则该人就得饮酒。 假比说,贾母、贾赦、贾政、贾宝玉和贾环是五个参加击鼓传花游戏的传花者,他们组成一个环链。击鼓者将花传给贾母,开始传花游戏。花由转载 2018-04-15 20:53:17 · 262 阅读 · 0 评论 -
迭代子模式
转载自 《JAVA与模式》之迭代子模式在阎宏博士的《JAVA与模式》一书中开头是这样描述迭代子(Iterator)模式的: 迭代子模式又叫游标(Cursor)模式,是对象的行为模式。迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象(internal representation)。聚集和JAVA聚集 多个对象聚在一起形成的总体称之为聚集(Aggr转载 2018-04-14 23:23:20 · 147 阅读 · 0 评论 -
策略模式
转载自 《JAVA与模式》之策略模式在阎宏博士的《JAVA与模式》一书中开头是这样描述策略(Strategy)模式的: 策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式的结构 策略模式是对算法的包装,是把使用算法的责任和算法本身分转载 2018-04-14 23:19:38 · 120 阅读 · 0 评论 -
组合模式的安全模式与透明模式
转载自 树形结构的处理——组合模式(四)1 透明组合模式与安全组合模式 通过引入组合模式,Sunny公司设计的杀毒软件具有良好的可扩展性,在增加新的文件类型时,无须修改现有类库代码,只需增加一个新的文件类作为AbstractFile类的子类即可,但是由于在AbstractFile中声明了大量用于管理和访问成员构件的方法,例如add()、remove()等方法,我们转载 2018-04-14 23:18:00 · 2512 阅读 · 0 评论