设计模式
文章平均质量分 88
主要写一些学习设计模式的总结
程序员徐小白
程序员徐小白,专注于Java后端研发领域。
同名微信公众号,我会第一时间在上面分享我的学习笔记,还有各种学习资料。
展开
-
【设计模式】我觉得Java程序员不需要学模板方法模式,你觉得呢?
什么是模板方法模式(Template Method)概念模板方法模式(Template Method)属于行为型模式,这个模式的名称听着有点让人摸不着头脑。模板方法模式是指在抽象类中定义一个非抽象方法,在这个非抽象方法中定义好如何调用抽象方法,而这些抽象方法实现交给子类去完成,相当于父类定好了框架,子类负责实现这个框架的内容。在面向对象语言中,我们如何使用抽象类,并在其中定义非抽象方法和抽象方法,模板方法模式给出了一个可以提供我们模仿的规范。现实生活中也有非常多这样的例子,像一台电脑,电脑主板已经固原创 2021-10-18 09:48:29 · 223 阅读 · 0 评论 -
【设计模式】为什么装饰器模式能够取代继承?
什么是装饰器模式(Decorator )概念装饰器模式(Decorator Pattern)属于结构型模式,是在不改变现有的对象结构(代码)的情况下,对这个对象动态添加一些新的职责(功能),希望通过用组合对象的方式替代继承的方式来实现对类的扩展。我们看它的名字就知道,装饰器,像我们带的手表,就能够不影响我们,然后赋予我们看时间的能力。装饰器模式是在不改变核心功能的基础上去新增一些新的功能,和代理模式非常地相似,在下面学习完如何实现装饰器模式后会做一下区分的总结。优点装饰器模式是继承的一种替代原创 2021-11-09 09:30:00 · 662 阅读 · 0 评论 -
【设计模式】享元模式,池技术的指导思想。
什么是享元模式(Flyweight)概念享元模式(Flyweight Pattern)属于结构型模式,主要是用于减少对象的创建和销毁的性能消耗,以减少内存的占用。面向对象的语言能够给我们的开发带来一定的灵活性和扩展性,而且更加符合人的思维方式,但这会让我们的系统创建很多对象,这会让我们系统的性能下降,所以可以使用一个缓冲池来把这些反复使用的对象存储起来,减少反复创建和销毁的次数,享元模式的思想就是复用对象。我们的生活中也有非常多的享元模式的例子,例如,围棋的棋子,共享单车,还有游泳池的游泳圈,这些东西原创 2021-11-08 19:01:19 · 143 阅读 · 0 评论 -
【设计模式】组合模式?建议改名叫树形模式!
什么是组合模式(Composite)概念组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。组合模式关注的是对象间的结构,希望能够让调用者在使用一组对象时和使用单个对象没什么区别,屏蔽掉组合对象和单个对象的差别。个人感觉组合模式应该叫做树形模式,当对象呈现成树形结构时,使用这个模式就非常的好了,建议改名。组合模式分为两种原创 2021-10-24 22:05:00 · 243 阅读 · 0 评论 -
【设计模式】备忘录模式不只是记录怕忘记的东西那么简单!
什么是备忘录模式(Memento)概念备忘录(Memento)模式属于行为型模式,又叫作快照模式,定义:在不破坏封装性的前提下,捕获一个对象内部的状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。简单来说,就是保存一个对象之前的状态,然后在某个时间回退到这个状态。我们使用的很多软件都提供了这个功能,我们使用的编辑工具,word、记事本、idea、typora等等,ctrl+z就可以回退自己的操作,可以防止我们的误操作。还有浏览器的倒退,可以让我们回到上一个页面。游戏中的存档,原创 2021-10-06 09:03:14 · 170 阅读 · 0 评论 -
【设计模式】策略模式让你的每一个方法都像一个锦囊妙计!
什么是策略模式(Strategy)概念策略(Strategy)模式属于行为型模式,定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。简单来说,就是把本来写在类内部的算法而且可以相互替换的算法全部都提取到算法类中,这些算法类就像一个个锦囊一样,然后通过使用不同的算法对象来实现算法的替换,至于为什么是算法,我觉得其实业务也行,但是业务的替换性不是很强,很多情况下不太适用。策略模式是想使用组合对象的方式来实现继承实现不了的代码复用,并且能够在横向竖向原创 2021-10-08 09:01:22 · 166 阅读 · 0 评论 -
【设计模式】我写了个简单的Demo来演示迭代器模式
什么是迭代器模式(Iterator)概念迭代器(Iterator)模式属于行为型模式,定义:提供一个迭代器来顺序访问聚合对象(聚合对象内部存储着其他对象,这些对象和聚合对象不一定是同生共死的关系)中的一系列数据,而不暴露聚合对象的内部表示。也就是实现聚合数据和遍历算法的分离,如果把数据和遍历算法都放到一个类中,首先这个类会变得非常臃肿,其次如果想更换遍历算法,就得修改代码了。一般情况下,只有在设计数据结构时才会使用迭代器模式,Java已经为我们定义好了非常多的数据结构, Collection、Lis原创 2021-10-09 13:50:32 · 166 阅读 · 0 评论 -
【设计模式】访问者模式,不愧是最复杂的设计模式之一!
什么是访问者模式(Visitor Pattern)概念访问者模式(Visitor Pattern)属于行为型模式,定义:在类的内部结构不变的情况下,不同的访问者访问这个对象都会呈现出不同的处理方式。有一点点抽象,前一句话的意思是指在写好一个类之后,这个类就基本上不需要改动了(只要需求不改),这其实就是为了解决类结构不变但操作处理逻辑易变的问题,把对数据的操作都封装到访问者类中,我们只需要调用不同的访问者,而无需改变改变结构类,实现了。又到了举例子的时间。来说说奶茶店会员,每个会员都是访问者,他们来到原创 2021-10-12 09:37:40 · 1021 阅读 · 0 评论 -
【设计模式】观察者模式:被观察者发生变化不应该是被观察者来通知吗?
什么是观察者模式(Observer)概念观察者模式(Observer)又称发布-订阅模式,属于行为型模式,研究对象之间的交互。观察者模式定义了对象间一对多的依赖关系,当被观察者对象发生改变时,所有依赖于它的对象都会得到通知并完成自动更新。观察者模式是为了解决一个对象想知道另一个对象状态变化的问题。当我们处于一对多情况,比如微信公众号和用户,多个用户订阅了一个公众号,用户想要知道公众号是否更新 ,这时候有两种方式可以获取到公众号的更新,第一种是poll方式,也就是拉取,每个用户都去发送请求,看看公众号是原创 2021-10-14 08:52:20 · 956 阅读 · 0 评论 -
【设计模式】怒敲两百多行代码来解释命令模式!
什么是命令模式(Command)概念命令模式(Command Pattern)属于行为型模式,定义:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。命令模式讲究的是解耦合,可延迟,像线程就是命令模式的典例,如果不适用命令模式的话,那么就无法将我们要执行的方法交给线程去执行,必须立马执行方法。举个例子,我们去餐厅吃饭,服务员都会拿个菜单给我们,这个菜单就是已经写好的“命令”,只需要我们跟服务员(请求者)说想要吃什么菜(命令),那服务员就会原创 2021-10-15 08:58:38 · 101 阅读 · 0 评论 -
【设计模式】中介者模式的目标是让对象的网状结构变成星形结构。
什么是中介者模式(Mediator)概念中介者模式(Mediator Pattern)属于行为型模式,中介者模式是为了解决对象之间相互引用的情况,通过中介者对象来解除这些对象之间的相互引用,让对象之间的通信交给中介者对象来完成,使得对象从网状结构转变成了星形结构,以此降低对象间的耦合程度。像我们在水群里聊天,我们可以把每个客户端当成一个对象,如果采用网状结构,那么就得每个客户端都得记录其他客户端的地址才行,那一个人想要加入这个水群就非常地困难,如果是采用星形结构,每个客户端都和一个服务端进行连接,服原创 2021-10-19 09:05:46 · 156 阅读 · 0 评论 -
【设计模式】学状态模式?学状态机√
什么是状态模式(State)概念状态模式(State Pattern)属于行为型模式,定义:一个对象的行为由其内部的状态决定。要想学习状态模式,那就一定要提到状态机了,状态机又是什么?状态机就是列举出一个东西的多种状态,研究这几种状态的切换行为,然后绘制成一个可以连通的状态图。这里以门闸为例,在广州地铁里,我们过完安检后,想要进入到地铁内部的话就需要刷卡过门闸,这里的闸门就有很多种状态,未刷卡前是关闭状态,我们无法通过闸门;刷卡后会有一个中间状态:处理中状态,这个状态,我们已经刷了卡,但机器还在处原创 2021-10-21 09:39:38 · 121 阅读 · 0 评论 -
【设计模式】外观模式,其实我们一直都在用。
什么是门面模式(Facade)概念门面模式,又叫做外观模式,属于结构型模式。我个人比较喜欢叫门面模式,因为这个模式是为了隐藏系统内部的复杂性,向外部提供一个统一的接口,使得外部访问该系统更加方便、更加简单。门面模式是迪米特法则的代表,它关心对象和对象之间的组合关系,它主要是想几个对象之间的复杂操作都封装在一个高层次的类中,外部调用无需关心它内部的逻辑,只需要调用自己想要的功能即可。我们在日常的开发中也会用到门面模式,用过Spring做开发的小伙伴一定知道MVC的层次划分,其中Controller层和原创 2021-10-22 10:25:30 · 389 阅读 · 0 评论 -
【设计模式】为什么要叫桥接模式?学完了我也没搞懂!
什么是桥接模式(Bridge)概念桥接模式的定义如下:**将抽象与实现分离,使它们可以独立变化。**这个概念说得很抽象,意思是将实现部分中的抽象部分分离出来,让抽象部分和实现部分间的耦合度降低。抽象化:将复杂事物中共同的特性抽象出来,对于面向对象来说就是把各种对象的特性抽象成一个类。实现化:针对抽象化的具体实现。桥接模式主张采用组合关系代替多层继承关系,继承关系会让实现类数量呈指数级增长,类的耦合程度也会提高。例如,现在想要设计产品类,小米和华为都有手机和平板,现在想要设计它们的产品类,如原创 2021-10-23 09:50:12 · 1343 阅读 · 0 评论 -
【设计模式】学会了适配器模式,让你的陈年旧类也能用。
前言适配器模式属于结构型模式,在前面的文章还讲到了代理模式,代理模式也是结构型模式,剩下的结构型模式有桥接模式、过滤器模式、组合模式、装饰器模式、外观模式、享元模式,而创建型模式已经全部介绍完了,包括工厂模式、单例模式、建造者模式、原型模式。什么是适配器模式(Adapter)概念适配器模式(Adapter)的定义如下:将一个类的接口转换成用户期待的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。总来说就是为了让A类能够使用B类,新创建一个C类来将B类转化成一个A类能够使用的类原创 2021-10-24 10:01:58 · 1352 阅读 · 0 评论 -
【设计模式目录】简单阐述一下设计模式
前言我爆肝了将近一个月的时间,写完了二十二种设计模式的学习笔记,还有一个解释器模式我打算后续有空就补一下。我个人觉得我的设计模式系列更加适合想要从零开始学习设计模式的小伙伴,因为我的开发经验也不是特别丰富,内容不涉及实际开发,仅供学习参考。如果有什么不正确的地方,希望各位大佬能帮我指点一二。为了能够有修改错误的时间,我打算一篇一篇地来发布文章,有问题会立刻修改。设计模式是什么?设计模式的本质是面向对象设计原则的实际运用,是对类的封装、继承、多态以及类的关联关系和组合管理的充分理解和应用。设计模式原创 2021-06-19 10:27:51 · 109 阅读 · 0 评论 -
【设计模式】原型模式,这是我学过最简单的设计模式了。
前言原型模式是属于创建型模式的一种,我在前面也是介绍了单例模式、构建器模式、工厂模式,这是创建型模式的最后一种了。在原型模式结束后,我会很快地进入结构性模式的学习。什么是原型模式(Prototype)概念用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。———百度百科简单来说,就是通过某个对象复制一个跟它一模一样的新对象。最形象的比喻就是,孙悟空拔毛后轻轻一吹就生成很多分身一样。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zDko9MVR-原创 2021-05-31 20:59:56 · 137 阅读 · 5 评论 -
【设计模式】Java程序员不能不学的七大设计原则!面向对象编程的黄金法则!
面向对象编程必须要会的,赶紧进来看,最后附上面试回答原创 2021-05-26 17:02:23 · 175 阅读 · 0 评论 -
【设计模式】简单工厂、工厂方法、抽象工厂这些设计模式一篇文章就能搞定!
一、什么是工厂模式1.概念工厂模式的设计思想是提供一个工厂,我们可以通过这个工厂创建出我们想要的对象实例。2.跟构建者模式的区别构建者模式是针对一个类,而工厂模式则针对多个类(实现同一个接口的)构建者模式是向类的构造方法传入一个对象进行创建的,工厂模式是直接创建一个对象,当然工厂模式内部也可以套用构建者模式来简化对象的创建。3.工厂模式的使用场景原创 2020-05-17 08:52:03 · 257 阅读 · 1 评论 -
【设计模式】学习了构建器模式,就能让你更加方便地创建对象
一、什么是构建器模式1.概念构建器(Builder)模式,有的也叫建造者模式。构建器模式的设计是为了能够让对象的创建更加方便,一般是会设计两个类,一个类是目标类,也就是我们需要的类;另一个类就是构建器类,它是为了我们创建目标类时更加的方便。2.构建器模式的使用场景目标类的属性过多。当我们需要设置参数时,就需要一个一个去set,或者重载构造方法,第一个方法就会让编写原创 2020-05-17 08:51:20 · 251 阅读 · 0 评论 -
【设计模式】面试官:请你手写一个单例模式!
# 一、什么是单例模式## 1.概念> 单例模式,属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类**在当前进程中只有一个实例**(根据需要,也有可能**一个线程中属于单例**,如:仅线程上下文内使用同一个实例)> ——百度百科单例模式就是严格控制一个类的实例,要求在一个进程或一个线程中**只存在一个实例**,如果没有就创建一个实例返回,如果有就返回已经已经存在的实例。不同的单例模式都是为了**确保只有一个实例**。原创 2020-05-16 17:30:20 · 342 阅读 · 0 评论 -
【设计模式】责任是责任,链是链,模式是模式,责任链模式是什么?
一、什么是责任链1.先看看百度百科是怎么解释的责任链模式是一种设计模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。> ——百度百科> 我们可以理解到,责任链就是多个对象一起共同对一个请求进行处理,这里还提到的,**直到链上的某一个对象决定处理此请求**。如果只是有一个对象对请求进行处理的话原创 2020-05-12 17:46:14 · 430 阅读 · 0 评论 -
【设计模式】快来了解一下无处不在的代理模式
个人感觉这个将的太抽象了,不过这里有个概念-“中介”,这个词就很能体现代理模式的精髓,一切代理模式其实都是一个中介,能够让使用者能够更加方便去使用,而不需要考虑其中复杂的过程。 - 让代码的职责更加清晰,经过代理之后,在使用方法时就不需要考虑业务逻辑之外的东西 - 具有高扩展性,能够很好的与其他方法进行组合 - 代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用原创 2020-05-11 13:18:32 · 151 阅读 · 0 评论 -
简单说明一下RESTful设计风格的概念和使用
1.什么是RESTfulrestful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。 ——百度百科简单来说,就是提供了一种规则,能够让api更加规范,易懂。REST的解释REST是Representational State Transfer的缩写,翻译过来就是”表现层状态转化“。表现层值得是把资源呈现出来的一中形式,像HTML;状态转移是指让服务器发生状态的原创 2020-05-10 16:48:26 · 535 阅读 · 0 评论