本文通过图书馆管理系统中,用户名校验、密码校验、需要增加问题,每次都要增加if判断语句,将其改用责任链模式进行链式调用,为了让代码更加的优雅,我们使用之前学过的建造者模式就代码进行改造。接着我们会介绍责任链模式在我们常用的框架中的运用,最后是责任链模式的优缺点和应用场景。读者可以拉取完整代码到本地进行学习,实现代码均测试通过后上传到码云。一、引出问题小王给老王打造了一套图书馆管理系统,随着访问量的不断增加,老王要求增加访问的用户名校验。小王说这有何难,说着就在用户访问图书馆之前加了一层判断语句,判断用户名是否合法。过了一段时间后,又给每个用户颁发了一个密码,就需要在用户名校验通过以后校验密码。
解释器模式字面意思,也即解释某些内容的含义。这种设计模式是实际开发中最不容易用到的。比如SQL解析,符号处理引擎,会用到解释器模式,属于更底层的开发人员才会用到的设计模式。本文就以解释器模式的概念、角色和简单的例子说明解释器模式,读者对这部分内容了解即可。一、概念解释器模式是指给定一门语言,定义它的文法的一种表示(如:加减乘除表达式和正则表达式等),然后再定义一个解释器,该解释器用来解释我们的文法表示(表达式)。解释器模式的结构与组合模式相似,不过其包含的组成元素比组合模式多,而且组合模式是对象结构型模式,而解释器模式是类行为型模式。解释器模式中包含四个角色:抽象解释器(AbstractExp
本文通过解决老王经常搞错借书人的问题,来引出行为型模式中的命令模式。为了在案例之上理解的更加透彻,我们需要了解命令模式在源码中的应用。最后指出命令模式的应用场景和优缺点。读者可以拉取完整代码到本地进行学习,实现代码均测试通过后上传到码云。一、引出问题老王的书房藏书越来越多,每天来借书的人络绎不绝。每天有人借书、还书、老王将A借的书算到B头上的乌龙事件频出。老王和小王就商量着手解决这个问题。小王提议,在老王和借书者之间再增加一个“记录员”角色,记录员只管报名字就行了,具体是借什么书由借书者自己决定就好了。老王说:这能解决部分问题。但在真实的场景下,不可能来一个借书者“记录员”就跑一趟。而且借书者
本文通过图书馆管理系统中,用户名校验、密码校验、需要增加问题,每次都要增加if判断语句,将其改用责任链模式进行链式调用,为了让代码更加的优雅,我们使用之前学过的建造者模式就代码进行改造。接着我们会介绍责任链模式在我们常用的框架中的运用,最后是责任链模式的优缺点和应用场景。读者可以拉取完整代码到本地进行学习,实现代码均测试通过后上传到码云。一、引出问题小王给老王打造了一套图书馆管理系统,随着访问量的不断增加,老王要求增加访问的用户名校验。小王说这有何难,说着就在用户访问图书馆之前加了一层判断语句,判断用户名是否合法。过了一段时间后,又给每个用户颁发了一个密码,就需要在用户名校验通过以后校验密码。
在我们实际业务中,可能存在多个类之间相互调用,形成了一个复杂的网状结构。这时候就需要有一种模式去“捋顺”他们之间的关系,引出一个中间者让类之间不再相互调用,该模式就是我们今天的主人公——中介者模式。一、概念理解我们先看中介者模式的官方概念:用一个中介者对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。大白话解释就是,引入一个“中介”,用于协调各个对象的关系,各个对象之间不用那么直白的直接调,对象只需要调用中介的方法,中介内部进行逻辑判断,由中介去调用各个对象的方法。概念基本清楚以后接着看中介者模式包含的角色都有哪些:中介者角色、
本文介绍设计模式中的迭代器模式,首先通俗的解释迭代器模式的基本概念和对应的四个角色,并根据四个角色举一个典型的实例,为了加强知识的连贯性,我们以Jdk源码集合中使用迭代器模式的应用进一步说明,最后说明迭代器模式的应用场景和优缺点。读者可以拉取完整代码本地学习,实现代码均测试通过上传到码云一、概念理解迭代器模式官方解释就是提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。何为聚合对象呢?最典型的就是集合类。大白话也就是,集合中的数据是私有的,集合中不应该提供直接遍历的方法,要定义一个新的对象用于访问这个集合。既然是一个专门用来遍历的对象,一个被遍历的聚合对象,很显然至少有
本文通过优化买票的重复流程来说明享元模式,为了加深对该模式的理解,会以String和基本数据类型的包装类对该模式的设计进一步说明。读者可以拉取完整代码到本地进行学习,实现代码均测试通过后上传到码云。一、引出问题鉴于小王之前的优质表现,老王决定带小王出去旅游一下,但在火车站买票时却陷于了长长的队伍。老王注意到,每次售票员卖票时都重新走一遍卖票的所有流程,很明显,如果始发地和目的地如果一样的成人票和儿童票是可以复用流程的,如果复用的话就可以大大提高卖票效率。二、概念和使用上面所说的复用流程实际上就是享元模式的设计思想,它是构造型设计模式之一,它通过共享数据使得相同对象在内存中仅创建一个实例,以降低
本文通过老王改造小王公司的整体架构来说明外观模式,所谓的外观模式其实就是在各种复杂的子系统中抽象出来一个接口,隐藏具体的实现细节,调用方调用时只需要调用接口即可。为了加深理解我们会选出外观模式在源码中的应用进行重点的介绍,最后是我对设计模式学习过程中的一些思考。读者可以拉取完整代码到本地进行学习,实现代码均测试通过后上传到码云。一、引出问题随着小王创业的不断深入,公司各个业务模块越来越复杂,每当客户们与他的合作时都要深入各个模块内部,而且客户要依赖小王的各个模块,给使用模块的客户带来了困难。小王就想请老王帮他规划一下公司的架构。老王听完了小王的需求,开始给他分析问题。现在的公司的架构已经演变的
在我们实际业务中,可能存在多个类之间相互调用,形成了一个复杂的网状结构。这时候就需要有一种模式去“捋顺”他们之间的关系,引出一个中间者让类之间不再相互调用,该模式就是我们今天的主人公——中介者模式。一、概念理解我们先看中介者模式的官方概念:用一个中介者对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。大白话解释就是,引入一个“中介”,用于协调各个对象的关系,各个对象之间不用那么直白的直接调,对象只需要调用中介的方法,中介内部进行逻辑判断,由中介去调用各个对象的方法。概念基本清楚以后接着看中介者模式包含的角色都有哪些:中介者角色、
本文介绍设计模式中的迭代器模式,首先通俗的解释迭代器模式的基本概念和对应的四个角色,并根据四个角色举一个典型的实例,为了加强知识的连贯性,我们以Jdk源码集合中使用迭代器模式的应用进一步说明,最后说明迭代器模式的应用场景和优缺点。读者可以拉取完整代码本地学习,实现代码均测试通过上传到码云一、概念理解迭代器模式官方解释就是提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。何为聚合对象呢?最典型的就是集合类。大白话也就是,集合中的数据是私有的,集合中不应该提供直接遍历的方法,要定义一个新的对象用于访问这个集合。既然是一个专门用来遍历的对象,一个被遍历的聚合对象,很显然至少有