设计模式
文章平均质量分 72
情、狠现实
小坤很困,快来写代码提神!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
设计模式-解释器模式
解释器模式解释器模式介绍定义给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。 用编译语言的方式来分析应用中的实例。这种模式实现了文法表达式处理的接口,该接口解释一个特定的上下文。优点扩展性好。由于在解释器模式中使用类来表示语言的文法规则,因此可以通过继承等机制来改变或扩展文法。容易实现。在语法树中的每个表达式节点类都是相似的,所以实现其文法较为容易。缺点执行效率较低。解释器模式中通常使用大量的循环和递归调用,当要解释的句子较复杂时,其运行原创 2022-04-16 11:21:37 · 164 阅读 · 0 评论 -
设计模式-备忘录模式(快照模式)
备忘录模式(快照模式)备忘录模式能记录一个对象的内部状态,当用户后悔时能撤销当前操作,使数据恢复到它原先的状态。备忘录模式介绍定义在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。优点提供了一种可以恢复状态的机制。当用户需要时能够比较方便地将数据恢复到某个历史的状态。实现了内部状态的封装。除了创建它的发起人之外,其他对象都不能够访问这些状态信息。简化了发起人类。发起人不需要管理和保存其内部原创 2022-04-15 19:15:35 · 540 阅读 · 0 评论 -
设计模式-访问者模式
访问者模式访问者模式介绍定义将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。 它将对数据的操作与数据结构进行分离,是行为类模式中最复杂的一种模式。优点扩展性好。能够在不修改对象结构中的元素的情况下,为对象结构中的元素添加新的功能。复用性好。可以通过访问者来定义整个对象结构通用的功能,从而提高系统的复用程度。灵活性好。访问者模式将数据结构与作用于结构上的操作解耦,使原创 2022-04-14 22:38:19 · 165 阅读 · 0 评论 -
设计模式-迭代器模式
迭代器模式设计模式介绍在日常开发中,我们几乎不会自己写迭代器。除非需要定制一个自己实现的数据结构对应的迭代器,否则,开源框架提供的 API 完全够用。定义提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示。优点访问一个聚合对象的内容而无须暴露它的内部表示。遍历任务交由迭代器完成,这简化了聚合类。它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历。增加新的聚合类和迭代器类都很方便,无须修改原有代码。封装性良好,为遍历不同的聚合结构提供一个统一的接口。原创 2022-04-14 20:27:53 · 362 阅读 · 0 评论 -
设计模式-中介者模式
中介者模式中介者模式介绍定义**定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。**中介者模式又叫调停模式,它是迪米特法则的典型应用。优点将各同事对象解耦,使得对象易于独立地被复用减少子类的生成,中介者将原本分布于多个对象间的行为集中在一起,改变这些行为只需生成新的中介者子类即可,这使得各个同事类可以被重用,无需对同事类扩展将对象间的一对多关联转变为一对一的关联,提高系统的灵活性,使得系统易于维护和扩展。应用场景事件驱原创 2022-04-13 22:43:07 · 321 阅读 · 0 评论 -
设计模式-观察者模式(发布-订阅模式)
观察者模式观察者模式介绍定义指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。优点降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。符合依赖倒置原则。目标与观察者之间建立了一套触发机制。应用场景对象间存在一对多关系,一个对象的状态发生改变会影响其他对象。当一个抽象模型有两个方面,其中一个方面依赖于另一方面时,可将这二者封装在独立的对象中以使它原创 2022-04-12 23:53:44 · 372 阅读 · 0 评论 -
设计模式-状态模式
状态模式当控制一个对象状态转换的条件表达式过于复杂时,把相关“判断逻辑”提取出来,用各个不同的类进行表示,系统处于哪种情况,直接使用相应的状态类对象进行处理,这样能把原来复杂的逻辑判断简单化,消除了 if-else、switch-case 等冗余语句,代码更有层次性,并且具备良好的扩展力。做同样的事情,不同意的状态下,有不同的表现行为!状态模式介绍定义对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。优点结构清晰,状态模式将与特原创 2022-04-12 22:11:16 · 354 阅读 · 0 评论 -
设计模式-职责链模式(责任链模式)
职责链模式将一系列类似却职责不全相同的对象 像链表一样 链接起来,当有一个请求,需要找能处理请求的处理对象,针对每一个请求如果都需要记住能处理它的对象是非常麻烦的,于是可以通过这条职责链,一路暴力寻找,知道找到能处理它的对象为止。这样用户无需记住很多对象,只需要把请求交给职责链即可,无须关心请求的处理细节和请求的传递过程,请求会自动进行传递。所以责任链将请求的发送者和请求的处理者解耦了。职责链模式介绍定义为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个原创 2022-04-12 17:14:00 · 626 阅读 · 0 评论 -
设计模式-命令模式
命令模式不直接操作接收者,而是通过下发命令来间接操作接收者命令模式介绍定义将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。 这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。优点扩展性良好,增加或删除命令非常方便。采用命令模式增加与删除命令不会影响其他类,且满足“开闭原则”。可以实现宏命令。命令模式可以与组合模式结合,将多个命令装配成一个组合命令,即宏命令。方便实现 Undo 和 Redo 操作。命令模式可以与备忘录模式结合,实原创 2022-04-12 14:08:44 · 544 阅读 · 0 评论 -
设计模式-策略模式
策略模式策略模式介绍定义**定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。**策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。优点策略模式提供了一系列的可供重用的算法族,恰当使用继承可以把算法族的公共代码转移到父类里面,从而避免重复的代码。策略模式可以提供相同行为的不同实现,客户可以根据不同时间或空间要求选择不同的。策略模式提供了对开闭原则的完美支持,可以在不原创 2022-04-12 09:13:10 · 390 阅读 · 0 评论 -
设计模式-模板方法模式
模板方法模式将一些固定流程创建一个模板,比如word模板、ppt模板、简历模板等。确定大致行为流程,具体行为内容交给实现类来实现。还可以通过钩子方法,在实现类中决定抽象类的执行行为!!!模板方法模式介绍定义定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。 它是一种类行为型模式。优点模板模式定义好了执行顺序,具体的实现交给子类负责,子类无需关心执行顺序套用模板,代码复用反向控制,通过父类调用子类操作,扩展子类原创 2022-04-11 17:15:32 · 646 阅读 · 0 评论 -
设计模式-组合模式(整体-部分模式)
组合模式(整体-部分模式)组合模式介绍定义将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系,使用户对单个对象和组合对象具有一致的访问性优点[透明组合模式]用户可以一致的处理单个对象和组合对象,不需要辨别是树枝还是树叶,非常便利可以任意组合,无限嵌套组件,组合成用户需要的组件!符合开闭原则,便于添加新的组件应用场景在需要表示一个对象整体与部分层次结构的场合需要对用户隐藏组合对象与单个对象的不同,用户可以使用[透明组合模式]统一的接口应对所有对象场合。组原创 2022-04-11 11:23:53 · 397 阅读 · 0 评论 -
设计模式-享元模式
享元模式享元模式介绍定义运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。优点如果系统有大量类似的对象,开会节省大量的内存及CPU资源典型案例String、Integer、Long…com.sun.org.apache.bcel.internal.generic.InstructionConstants享元模式结构与实现其实享元模式好比 工厂方法模式 和 单例模式 的结原创 2022-04-11 10:20:53 · 188 阅读 · 0 评论 -
设计模式-外观模式(门面模式)
外观模式(门面模式)外观模式介绍定义通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。 该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。好比我们去封装工具类。优点简化客户端的调用代码复用,整合应用场景需要使用复杂的子系统,但想避免重复且复杂的调用过程子系统需要组织成层结构时经典案例org.apache.catalina.connector.RequestFa原创 2022-04-10 22:16:50 · 579 阅读 · 0 评论 -
设计模式-装饰器模式
装饰器模式装饰器模式介绍定义指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。优点不改变原有对象,扩展对象功能使用不同的组合可以实现不同效果符合开闭原则应用场景扩展一个类的功能或给一个类添加附加职责经典案例Servlet装饰器模式结构与实现具体的装饰器角色可以相互嵌套!!一层层装饰!!结构抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。具体构件(Conc原创 2022-04-10 20:37:33 · 477 阅读 · 0 评论 -
设计模式-代理模式
代理模式代理模式介绍分类静态代理动态代理定义由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。优点可以使真实角色操作更加纯粹,不需要去关心一些公共业务。公共业务交给代理角色处理,实现业务的分工。公共业务发生扩展时,方便集中管理。缺点一个真实角色会产生一个代理角色,代码量翻倍。步骤定义代理的接口被代理的类代理类客户端访问代理类代理模式结构与实现原创 2022-04-10 17:30:16 · 134 阅读 · 0 评论 -
设计模式-桥接模式
桥接模式桥接模式介绍介绍将抽象与实现分离,使它们可以独立变化。 它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。优点取代多继承解决多继承中类的多职责问题。减少子类个数,降低管理和维护成本。提高系统可维护性,在两个变化维度中任意扩展一个维度都不需要修改原有系统。符合开闭原则,好比用桥将两个变化维度连接起来。缺点由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。要求正确识别出系统中两个独立变化的维度,因此其使用范围有一定局限性。原创 2022-04-09 22:36:35 · 155 阅读 · 0 评论 -
设计模式-适配器模式
适配器模式适配器模式介绍定义将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。类适配器模式对象适配器模式优点客户端通过适配器可以透明地调用目标接口。一个对象适配器可以把多个不同的适配者适配到同一个目标可以适配一个适配者的子类,根据“里氏替换原则”,适配者的子类也可以通过该适配器适配缺点类适配器在不支持多继承的语言中一次只能适配一个适配者类应用场景系统需要使用一些现有的类,而这些类的接口或方法名不符合系统原创 2022-04-09 18:45:28 · 432 阅读 · 0 评论 -
设计模式-建造者模式
建造者模式建造者模式介绍定义将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。优点封装性好,构建与表示分离扩展性好,各个具体的建造者相互独立,符合开闭原则用户无需了解产品内部细节,建造者可以对创建过程逐步细化缺点产品组成部分相同,限制了使用范围如果产品内部变化复杂,且内部发生变化,建造者也需要同步修改!维护成本高!原创 2022-04-06 19:54:17 · 337 阅读 · 0 评论 -
设计模式-抽象工厂模式
抽象工厂模式定义是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构同一个产品等级指相同类型产品!同一个产品族指的是同一个工厂!使用抽象工厂模式一般要满足以下条件。系统中有多个产品族,每个具体工厂创建同一族但属于不同等级结构的产品。系统一次只可能消费其中某一族产品,即同族的产品一起使用。优点同一个产品族中的所有产品由同一个工厂生产。当需要产品族时,抽象工厂可以保证用户始终只使用同一工厂生产的产品抽原创 2022-04-06 17:38:19 · 669 阅读 · 0 评论 -
设计模式-工厂方法模式
工厂方法模式工厂方法模式介绍定义“工厂方法模式”是对简单工厂模式的进一步抽象化,其好处是可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则。优点用户只需要指定具体的 工厂名字 就可以获得需要的产品!无序了解产品具体生产过程。灵活性较强,对于每个新产品只需要多写一个对应的工厂类高层模块只需要知道产品抽象类,无序关系实现类,满足迪米特法则、依赖倒置原则和里氏替换原则缺点类数量容易过多抽象产品只能生产一种产品应用场景用户只需要知道工厂名不知道具体产品名原创 2022-04-06 16:58:29 · 355 阅读 · 0 评论 -
设计模式-简单工厂模式
简单工厂模式简单工厂模式介绍定义我们把被创建的对象称为“产品”,把创建产品的对象称为“工厂”。如果要创建的产品不多,只要一个工厂类就可以完成,这种模式叫“简单工厂模式”。在简单工厂模式中创建实例的方法通常为静态(static)方法,因此简单工厂模式(Simple Factory Pattern)又叫作静态工厂方法模式(Static Factory Method Pattern)。简单工厂模式每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度,违背了“开闭原则”。原创 2022-04-06 13:54:58 · 531 阅读 · 0 评论 -
设计模式-原型模式
原型模式原型模式介绍定义用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。优点性能上更高效可以深度克隆保存对象状态,实现快照缺点需要实现 Cloneable 接口 -> 实现clone方法当对已有类进行改造时,可能需要修改clone方法代码,违背开闭原则实现深克隆需要写复杂的代码,且对象之间存在多重嵌套引用时,每一层对象都需要支持深克原创 2022-04-06 12:52:05 · 138 阅读 · 0 评论 -
设计模式-单例模式
设计模式-创建型模式-单例模式饿汉式单例模式懒汉式单例模式DCL懒汉式单例模式原创 2022-04-06 11:07:01 · 213 阅读 · 0 评论 -
设计模式-面向对象设计七大法则
面向对象设计七大法则开闭原则当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。软件中易变的细节可以从抽象派生来的实现类来进行扩展,当软件需要发生变化时,只需要根据需求重新派生一个实现类来扩展就可以了依赖倒置原则高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象(面向接口编程)由于在软件设计中,细节具有多变性,而抽象层则相对稳定,因此以抽象为基础搭建起来的架构要比以细节为基础搭建起来的架构要稳定得多。这里原创 2022-04-06 15:24:19 · 575 阅读 · 0 评论
分享