随笔分类 -  设计模式

摘要:概述 访问者模式是一种较为复杂的行为型设计模式,它包含访问者和被访问元素两个主要组成部分,这些被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作。例如处方单中的各种药品信息就是被访问的元素,而划价人员和药房工作人员就是访问者。访问者模式使得用户可以在不修改现有系统的情况下扩展 阅读全文
posted @ 2022-12-11 17:31 Leaos 阅读(256) 评论(0) 推荐(0)
摘要:概述 模板方法模式是结构最简单的行为型设计模式,在其结构中只存在父类与子类之间的继承关系。通过使用模板方法模式,可以将一些复杂流程的实现步骤封装在一系列基本方法中,在抽象父类中提供一个称之为模板方法的方法来定义这些基本方法的执行次序,而通过其子类来覆盖某些步骤,从而使得相同的算法框架可以有不同的执行 阅读全文
posted @ 2022-12-08 16:14 Leaos 阅读(59) 评论(0) 推荐(0)
摘要:概述 在策略模式中,可以定义一些独立的类来封装不同的算法,每一个类封装一种具体的算法。在这里,每一个封装算法的类都可以称之为一种策略(Strategy),为了保证这些策略在使用时具有一致性,一般会提供一个抽象的策略类来做规则的定义,而每种算法则对应于一个具体策略类。 策略模式的主要目的是将算法的定义 阅读全文
posted @ 2022-12-06 21:25 Leaos 阅读(53) 评论(0) 推荐(0)
摘要:概述 状态模式用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。当系统中某个对象存在多个状态,这些状态之间可以进行转换,而且对象在不同状态下行为不相同时可以使用状态模式。状态模式将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象状态可以灵活变化。对于客户端而言,无须关心对 阅读全文
posted @ 2022-12-04 09:38 Leaos 阅读(52) 评论(0) 推荐(0)
摘要:概述 观察者模式是使用频率最高的设计模式之一,用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应。在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间可以没有任何相互联系,可以根据需要 阅读全文
posted @ 2022-12-03 10:57 Leaos 阅读(83) 评论(0) 推荐(0)
摘要:概述 备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原。当前很多软件都提供了撤销(Undo)操作,其中就使用了备忘录模式。 备忘录模式定义如下:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对 阅读全文
posted @ 2022-12-02 10:12 Leaos 阅读(114) 评论(0) 推荐(0)
摘要:概述 如果在一个系统中对象之间的联系呈现为网状结构,如下图所示。对象之间存在大量的多对多联系,将导致系统非常复杂,这些对象既会影响别的对象,也会被别的对象所影响,这些对象称为同事对象,它们之间通过彼此的相互作用实现系统的行为。在网状结构中,几乎每个对象都需要与其他对象发生相互作用,而这种相互作用表现 阅读全文
posted @ 2022-12-01 17:55 Leaos 阅读(97) 评论(0) 推荐(0)
摘要:概述 在软件开发时,经常需要使用聚合对象来存储一系列数据。聚合对象拥有两个职责:一是存储数据;二是遍历数据。从依赖性来看,前者是聚合对象的基本职责;而后者既是可变化的,又是可分离的。因此,可以将遍历数据的行为从聚合对象中分离出来,封装在一个被称之为 "迭代器" 的对象中,由迭代器来提供遍历聚合对象内 阅读全文
posted @ 2022-11-30 10:08 Leaos 阅读(55) 评论(0) 推荐(0)
摘要:文法规则和抽象语法树 解释器模式描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子,以及如何解释这些句子。在正式分析解释器模式结构之前,先来学习如何表示一个语言的文法规则以及如何构造一棵抽象语法树。 例如对于表达式 “1+2+3-4+1”,其中包含了3个语言单位,可以使用如下文法规则来定 阅读全文
posted @ 2022-11-29 21:10 Leaos 阅读(76) 评论(0) 推荐(0)
摘要:概述 在软件开发中,经常需要向某些对象发送请求(调用其中的某个或某些方法),但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,此时,特别希望能够以一种松耦合的方式来设计软件,使得请求发送者与请求接收者能够消除彼此之间的耦合,让对象之间的调用关系更加灵活,可以灵活地指定请求接收者以及被请求的操 阅读全文
posted @ 2022-11-28 11:05 Leaos 阅读(236) 评论(0) 推荐(0)
摘要:概述 很多情况下,在一个软件系统中可以处理某个请求的对象不止一个,例如SCM系统中的采购单审批,主任、副董事长、董事长和董事会都可以处理采购单,他们可以构成一条处理采购单的链式结构,采购单沿着这条链进行传递,这条链就称为职责链。 职责链可以是一条直线、一个环或者一个树形结构,最常见的职责链是直线型, 阅读全文
posted @ 2022-11-04 10:16 Leaos 阅读(117) 评论(0) 推荐(0)
摘要:概述 代理模式是一种应用很广泛的结构型设计模式,而且变化很多。在代理模式中引入了一个新的代理对象,代理对象可以在客户端对象和目标对象之间起到中介的作用,去掉客户不能看到的内容和服务或者增添客户需要的额外服务。 代理模式定义如下:给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理模式是一种 阅读全文
posted @ 2022-11-03 08:44 Leaos 阅读(200) 评论(0) 推荐(0)
摘要:概述 当一个软件系统在运行时产生的对象数量太多,将导致运行代价过高,带来系统性能下降等问题。例如,在一个文本字符串中存在很多重复的字符,如果每一个字符都用一个单独的对象来表示,将会占用较多的内存空间。那么,如何去避免系统中出现大量相同或相似的对象,同时又不影响客户端程序通过面向对象的方式对这些对象进 阅读全文
posted @ 2022-11-01 09:53 Leaos 阅读(57) 评论(0) 推荐(0)
摘要:概述 根据单一职责原则,在软件中将一个系统划分为若干个子系统(Subsystem)有利于降低整个系统的复杂性,一个常见的设计目标是使客户类与子系统之间的通信和相互依赖关系达到最小,而达到该目标的途径之一就是引人一个外观(Facade)角色,它为子系统的访问提供了一个简单而单一的人口。外观模式也是迪米 阅读全文
posted @ 2022-10-31 09:13 Leaos 阅读(54) 评论(0) 推荐(0)
摘要:概述 装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为。在现实生活中,这种情况也到处存在,例如一张照片,可以不改变照片本身,给它增加一个相框,使得它具有防潮的功能,而且用户可以根据需要给它增加不同类型的相框,甚至可以在一个小相框的外面再套一个大相框。 装饰模式是一种用于替代继承的技 阅读全文
posted @ 2022-10-29 12:10 Leaos 阅读(95) 评论(0) 推荐(0)
摘要:概述 对于树形结构,当容器对象(例如文件夹)的某一个方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员对象(可以是容器对象,也可以是叶子对象)并调用执行,牵一而动百,其中使用了递归调用的机制来对整个结构进行处理。由于容器对象和叶子对象在功能上的区别,在使用这些对象的代码中必须有区别地对待容器 阅读全文
posted @ 2022-10-28 11:52 Leaos 阅读(47) 评论(0) 推荐(0)
摘要:概述 桥接模式是一种很实用的结构型设计模式。如果软件系统中某个类存在两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展,让系统更加符合单一职责原则。与多层继承方案不同,它将两个独立变化的维度设计为两个独立的继承等级结构,并且在抽象层建立一个抽象关联,该关联关系类似一条连接两个 阅读全文
posted @ 2022-10-27 11:48 Leaos 阅读(123) 评论(0) 推荐(0)
摘要:概述 与电源适配器相似,在适配器模式中引入了一个被称为适配器(Adapter)的包装类,而它所包装的对象称为适配者(Adaptee),即被适配的类。适配器的实现就是把客户类的请求转化为对适配者的相应接口的调用。也就是说:当客户类调用适配器的方法时,在适配器类的内部将调用适配者类的方法,而这个过程对客 阅读全文
posted @ 2022-10-26 12:00 Leaos 阅读(98) 评论(0) 推荐(0)
摘要:概述 建造者模式又称为生成器模式,它是一种较为复杂、使用频率也相对较较低的创建型模式。建造者模式为客户端返回的不是一个简单的产品,而是一个由多个部件组成的复杂产品。 建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分 阅读全文
posted @ 2022-10-25 09:35 Leaos 阅读(119) 评论(0) 推荐(0)
摘要:概述 在使用原型模式时,需要首先创建一个原型对象,再通过复制这个原型对象来创建更多同类型的对象。其定义如下:使用原型实例指定创建对象的种类,并且通过克隆这些原型创建新的对象。原型模式是一种对象创建型模式。 原型模式的工作原理很简单:将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求 阅读全文
posted @ 2022-10-24 10:53 Leaos 阅读(54) 评论(0) 推荐(0)