- 博客(25)
- 收藏
- 关注
原创 访问者模式
访问者模式 定义 表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。 解决 主要将数据结构与数据操作分离。 优点 增加新的操作很容易。因为增加新的操作意味着增加一个新的访问者。访问者模式
2022-05-27 09:53:25
157
原创 -模板模式
模板模式: 定义 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 解决 一些方法通用,却在每一个子类都重新写成了方法。我们将这些通用方法抽象出来,让其在子类中实现。 优点 封装不变部分到父类,扩展可变部分,提供代码复用平台。 提取公共代码部分便于维护。 行为由父类控制,子类实现。 缺点 不同的实现需要不同的类,导致类数目庞大。 结构 模板模式包含如下角色: AbstractClass: 抽象父类 ConcreteClass:
2022-05-27 09:49:11
115
原创 -策略模式
策略模式 定义 定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。 解决 在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。实现某一个功能有多个途径,此时可以使用该模式来使得系统可以灵活地选择解决途径,也能够方便地增加新的解决途径。 优点 策略模式提供了对“开闭原则”的完美支持,用户可以在不修改原有系统的基础上选择算法或行为,也可以灵活地增加新的算法或行为。(算法可以自由切换且扩展性良好) 使用策略模式
2022-05-27 09:44:42
133
原创 -状态模式
状态模式 定义 允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。在状态模式中,类的行为是基于它的状态改变的。 解决 当对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。 在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的(stateful)对象,这样的对象状态是从事先定义好的一系列值中取出的。当一个这样的对象与外部事件产生互动时,其内部状态就会改变,从而使得系统的行为也随之发生变化。 状态模式主要解决的是
2022-05-27 09:40:56
103
原创 观察者模式
观察者模式 定义 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。 解决 一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。 将一个系统分割成一系列相互协作的类有一个很不好的副作用,那就是需要维护相关对象间的一致性。我们不希望为了
2022-05-27 09:36:44
162
原创 备忘录模式
备忘录模式 定义 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 解决 备忘录模式(Memento),主要用于捕获一个对象的内部状态,以便在将来的某个时候恢复此状态。 优点 给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。 实现了信息的封装,使得用户不需要关心状态的保存细节。 缺点 消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。 结构 备忘录模式包含如下
2022-05-27 09:07:01
150
原创 中介者模式
中介者模式 定义 用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 中介模式(Mediator)又称调停者模式,它的目的是把多方会谈变成双方会谈,从而实现多方的松耦合。 解决 对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。 优点 简化了对象之间的交互。 将各同事解耦。 减少子类生成。 可以简化各同事类的设计和实现。 缺点 在
2022-05-27 08:55:54
85
原创 迭代器模式
迭代器模式 定义 提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。 解决 不同的方式来遍历整个整合对象。 优点 它支持以不同的方式遍历一个聚合对象。 迭代器简化了聚合类。 在同一个聚合上可以有多个遍历。 在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。 缺点 由于迭代器模式将存储数据和
2022-05-26 10:06:20
78
原创 解释器模式
解释器模式 定义 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。 解决 对于一些固定文法构建一个解释句子的解释器。 解释器模式(Interpreter)是一种针对特定问题设计的一种解决方案。例如,匹配字符串的时候,由于匹配条件非常灵活,使得通过代码来
2022-05-26 10:03:26
1926
原创 -命令模式
命令模式 定义 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。 解决 在系统中,行为请求行为者通常是一种紧密结合的实现,但在某些情况下,需要对行为进行记录、撤销关系或重做、事务处理等时,这种无法变化的紧耦合的情况用命令模式设计就合适。 优点 能较容易地设计一个命令队列。 在需要的情况下,可以较容易地将命令记入日志。 允许接受请求的一方决定是否要否决请求。 可以容易地实现对请求的撤销和重做。 由于加紧新的具体命令类不影响其他的类,因此增加新
2022-05-26 09:54:41
90
原创 职责链模式
职责链模式 定义 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 解决 避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。在处理消息的时候以过滤很多道。 职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。 优点 当客户提交一个请求时
2022-05-26 09:00:31
193
原创 -代理模式
代理模式 定义 给某一个对象提供一个代理,并由代理对象控制对原对象的引用。在代理中,一个类代表另一个类的功能。代理模式的英文叫做Proxy或Surrogate,它是一种对象结构型模式。一般分为远程代理、虚拟代理、安全代理。 解决 在某些情况下,一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为“代理”的第三者来实现间接引用。代理对象可以在客户端和目标对象之间起到中介的作用,并且可以通过代理对象去掉客户不能看到 的内容和服务或者添加客户需要的额外服务。 优点 代理模式能够协调调用者和被调用者,在一
2022-05-26 08:56:46
184
原创 -享元模式
享元模式 定义 运用共享技术有效地支持大量细粒度的对象。 系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式,它是一种对象结构型模式。 解决 在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。 面向对象技术可以很好地解决一些灵活性或可扩展性问题,但在很多情况下需要在系统中增加类和对象的个数。当对象数量太多时,将导致运行代价过高,
2022-05-26 08:50:47
111
原创 -外观模式
外观模式 定义 外观模式(Facade Pattern)隐藏系统的复杂性,外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。Facade就相当于一个中介。 解决 降低访问复杂系统的内部子系统时的复杂度,简化客户端之间的接口。 优点 对客户屏蔽子系统组件,减少了客户处理的对象数目并使得子系统使用起来更加容易。通过引入外观模式,客户代码将变得很简单,与之关
2022-05-26 08:46:26
124
原创 装饰器模式
装饰器模式 定义 装饰模式(Decorator Pattern) :动态地给一个对象增加一些额外的职责(Responsibility),就增加对象功能来说,装饰模式比生成子类实现更为灵活。其别名也可以称为包装器(Wrapper),与适配器模式的别名相同,但它们适用于不同的场合。根据翻译的不同,装饰模式也有人称之为“油漆工模式”。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。 解决 我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩
2022-05-26 08:42:49
121
原创 -组合模式
组合模式 定义 组合模式(Composite),又叫部分整体模式,将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 解决 它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 优点 高层模块调用简单, 节点自由增加。 一致性的使用组合结构和单个个体。 缺点 在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。 结构 组合模式包含如
2022-05-26 08:31:48
137
原创 -桥接模式
桥接模式 定义 将抽象部分与它的实现部分分离,使它们都可以独立地变化。 实现系统可能有多角度分类,每一种都有可能变化,那么就把这种多角度分离出来独立变化,减少它们之间的耦合。 解决 在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。 优点 分离抽象接口及其实现部分。 桥接模式有时类似于多继承方案,但是多继承方案违背了类的单一职责原则(即一个类只有一个变化的原因),复用性比较差,而且多继承结构中类的个数非常庞大,桥接模式是比多继承方案更好的解决方法。 桥接模式提高了系统的可扩充性,在两个变
2022-05-26 08:19:48
112
原创 适配器模式
适配器模式 定义 将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。 解决 主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。 优点 将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,而无须修改原有代码。 增加了类的透明性和复用性,将具体的实现封装在
2022-05-25 22:47:44
118
原创 -原型模式
原型模式 定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。 解决 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。 在运行期建立和删除原型。 优点 性能提高。 逃避构造函数的约束。 缺点
2022-05-25 22:38:43
105
原创 建造者模式
建造者模式 定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式。根据中文翻译的不同,建造者模式又可以称为生成器模式。 建造者模式像是使用多个“小型”工厂来最终创建出一个完整对象。 解决 主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各
2022-05-25 22:35:39
95
原创 -单例模式
单例模式 定义 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 单例模式(Singleton Pattern):单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。 单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。单例模式是一种对象创建型模式。单例模式又名单件模式或单态模式。 解决 一个全局使用的类频繁地创建与销毁。 优点 提供了对唯一实例的受控访问。因为单例类封装了它的
2022-05-25 22:26:40
188
原创 抽象工厂模式
抽象工厂模式 定义 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 解决 抽象工厂模式和工厂方法不太一样,它要解决的问题比较复杂,不但工厂是抽象的,产品是抽象的,而且有多个产品需要创建。 抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则需要面对多个产品等级结构,一个工厂等级结构可以负责多个不同产品等级结构中的产品对象的创建。 优点 抽象工厂模式隔离了具体类的生成,使得客户并不需要知道什么被创建。由于这种隔离,更换一个具体工厂就变得相对容
2022-05-25 20:36:49
183
原创 工厂方法模式
工厂方法模式 定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。 工厂方法使得创建对象和使用对象是分离的,并且客户端总是引用抽象工厂和抽象产品。 解决 主要解决接口选择的问题。 我们明确地计划不同条件下创建不同实例时。 优点 在工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节,用户只需要关心所需产品对应的工厂,无须关心创建细节,甚至无须知道具体产品类的类名。 基于工厂角色和产品角色的多态
2022-05-25 19:33:08
127
原创 设计模式笔记参考
这个参考了一些文章。都写这里吧。 《大话设计模式》 廖雪峰的官方网站-设计模式:https://www.liaoxuefeng.com/wiki/1252599548343744/1264742167474528 菜鸟教程-设计模式:https://www.runoob.com/design-pattern/design-pattern-tutorial.html 图说书记模式:https://design-patterns.readthedocs.io/zh_CN/latest/index.html gi
2022-05-25 18:46:33
115
原创 简单工厂模式
简单工厂模式 定义 简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,该模式对对象创建管理方式最为简单,因为其仅仅简单的对不同类对象的创建进行了一层薄薄的封装。该模式通过向工厂传递类型来指定要创建的对象。 解决 如果我们希望在使用这些按钮时,不需要知道这些具体按钮类的名字,只需要知道表示该按钮类的一个参数,并提供一个调用方便的方法,把该参数传入方法即可返回一个相应的按钮对象,此时,就可以使用简单工厂模式。 优点 工厂类含有必
2022-05-25 18:44:37
109
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅