
软件设计模式
xcosy
Github Developer
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
访问者模式
定义 访问者(Visitor)模式将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进行分离。 访问者模式属于对象行为型模式,是行为型模式中最复杂的一种模式。 要点 优点: 扩展性好。能够在不修改对象结构中的元素的情况下,为对象结构中的元素添加新的功能。 复...原创 2020-03-09 20:34:53 · 240 阅读 · 0 评论 -
策略模式
定义 策略(Strategy)模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户,通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行实现和管理。 策略模式属于对象行为型模式。 要点 优点: 多重条件语句不易维护,而使用策略模式可以避免使用多重条件语句。 提供了一系列的可供重用的算法族,恰当使用继承可以把算法...原创 2020-03-09 18:20:28 · 171 阅读 · 0 评论 -
状态模式
定义 状态(State)模式对有状态的对象,把复杂的 “判断逻辑” 提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。 状态模式属于对象行为型模式。 要点 优点: 状态模式将与特定状态相关的行为局部化到一个状态中,并且将不同状态的行为分割开来,满足“单一职责原则”。 减少对象间的相互依赖。将不同的状态引入独立的对象中会使得状态转换变得更加明确,且减少对象间的相互依赖。 有利...原创 2020-03-09 17:38:52 · 254 阅读 · 0 评论 -
观察者模式
定义 观察者(Observer)模式 又称发布-订阅模式、模型-视图模式,指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 观察者模式属于对象行为型模式。 要点 优点: 降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。 目标与观察者之间建立了一套触发机制。 缺点: 目标与观察者之间的依赖关系并没有完全解除,而且有可能出现循环...原创 2020-03-08 23:46:48 · 207 阅读 · 0 评论 -
备忘录模式
定义 备忘录(Memento)模式又叫快照模式,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。 备忘录模式属于对象行为型模式。 要点 优点: 提供了一种可以恢复状态的机制。当用户需要时能够比较方便地将数据恢复到某个历史的状态。 实现了内部状态的封装。除了创建它的发起人之外,其他对象都不能够访问这些状态信息。 简化了发...原创 2020-03-08 21:08:38 · 259 阅读 · 0 评论 -
中介者模式
定义 中介者(Mediator)模式又称又叫调停模式,定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合变得松散,且可以独立地改变它们之间的交互。它是迪米特法则的典型应用。 中介者模式属于对象行为型模式。 要点 优点: 降低了对象之间的耦合性,使得对象易于独立地被复用。 将对象间的一对多关联转变为一对一的关联,提高系统的灵活性,使得系统易于维护和扩展。 缺点: 当同事类太多时...原创 2020-03-08 16:42:31 · 274 阅读 · 0 评论 -
迭代器模式
定义 迭代器(Iterator)模式提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。 迭代器模式是一种对象行为型模式。 要点 迭代器模式是通过将聚合对象的遍历行为分离出来,抽象成迭代器类来实现的,其目的是在不暴露聚合对象的内部结构的情况下,让外部代码透明地访问聚合的内部数据。 优点: 访问一个聚合对象的内容而无须暴露它的内部表示。 遍历任务交由迭代器完成,这简化了聚合...原创 2020-03-07 23:15:44 · 126 阅读 · 0 评论 -
命令模式
定义 命令(Command)模式将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。 命令模式属于对象行为型模式。 要点 优点: 降低系统的耦合度。命令模式能将调用操作的对象与实现操作的对象解耦。 增加或删除命令非常方便。采用命令模式增加与删除命令不会影响其他类,它满足“开闭原则”,对扩展比较灵...原创 2020-03-07 19:09:49 · 217 阅读 · 0 评论 -
责任链模式
定义 责任链(Chain of Responsibility)模式又称职责链模式,是为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。 在责任链模式中,客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递过程,所以责任链将请求的发送者和请求的处理者解耦了。 ...原创 2020-03-06 18:06:38 · 166 阅读 · 0 评论 -
解释器模式
定义 解释器(Interpreter)模式给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式来分析应用中的实例。这种模式实现了文法表达式处理的接口,该接口解释一个特定的上下文。 解释器模式属于类行为型模式。 要点 优点: 扩展性好。由于在解释器模式中使用类来表示语言的文法规则,因此可以通过继承等机制来改变或扩展文法。 容易实现。在语法...原创 2020-03-06 16:52:19 · 202 阅读 · 0 评论 -
模板方法模式
定义 模板方法(Template Method)模式定义一个操作的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。 模板方法模式属于类行为型模式。 要点 优点: 封装了不变部分,扩展可变部分。它把认为是不变部分的算法封装到父类中实现,而把可变部分算法由子类继承实现,便于子类继续扩展。 在父类中提取了公共的部分代码,便于代码复用。 部分方法...原创 2020-03-06 12:36:38 · 205 阅读 · 0 评论 -
过滤器模式
定义 过滤器模式(Intercepting Filter Pattern),又称标准模式(Criteria Pattern),主要用于统一接收并过滤客户端的请求,根据过滤器的选择,将请求传送给对应的目标处理程序。 过滤器模式属于对象结构型模式。 要点 主要角色: 目标对象(Target):处理请求,根据要求执行任务。 过滤器(Filter):过滤器在请求处理程序执行请求之前或之后,执行某些任务。...原创 2020-03-06 11:07:39 · 428 阅读 · 0 评论 -
代理模式(动态代理)
静态代理模式的缺点 当场景稍微复杂一些的时候,静态代理的缺点也会暴露出来: 1、当需要代理多个类的时候,由于代理对象要实现与目标对象一致的接口,如果只维护一个代理类,由这个代理类实现多个接口,但是这样就导致代理类过于庞大;如果新建多个代理类,每个目标对象对应一个代理类,但是这样会产生过多的代理类。 2、 当接口需要增加、删除、修改方法的时候,目标对象与代理类都要同时修改,不易维护。 动态代理 类...原创 2020-03-06 00:02:30 · 162 阅读 · 0 评论 -
代理模式(静态代理)
定义 **代理模式(Proxy)**为一个对象提供一个替身或占位符以控制对这个对象的访问。访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。 使用代理模式创建代理对象,让代理对象(representative)控制对某对象的访问,被代理的对象可以是远程对象、创建开销大的对象或者是需要安全控制的对象。 代理模式属于对象结构型模式。 代理分为静态代理和动态代理两种。 ...原创 2020-03-05 12:00:20 · 248 阅读 · 0 评论 -
享元模式
定义 享元(Flyweight)模式又称蝇量模式,主要运用共享技术来有效地支持大量细粒度对象的复用。主要用于减少创建对象的数量,以减少内存占用和提高性能。 如果想要让某个类的一个实例用来提供许多 “虚拟实例” ,就可以考虑使用享元模式。 享元模式属于对象结构型模式。 要点 优点: 可以极大减少内存中对象的数量,使得相同或相似对象在内存中只保存一份,从而可以节约系统资源,提高系统性能。 享元模式...原创 2020-03-04 16:18:44 · 152 阅读 · 0 评论 -
外观模式
定义 外观(Facade)模式是一种通过为多个复杂的子系统提供一个统一的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。 外观模式属于对象结构型模式。 要点 外观(Facade)模式是“迪米特法则”的典型应用,优点: 降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调...原创 2020-02-29 22:19:21 · 316 阅读 · 0 评论 -
组合模式
定义 组合(Composite)模式:又称作部分整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示 “部分-整体” 的关系,使用户对单个对象和组合对象具有一致的访问性。 组合模式属于对象结构型模式。 要点 组合模式的优点: 组合模式使得客户端代码可以一致地处理单个对象和组合对象,无须关心自己处理的是单个对象,还是组合对象,这简化了客户端代码; 更容易在组合体内加入新的对象,客户端不会...原创 2020-02-29 20:59:08 · 307 阅读 · 0 评论 -
装饰者模式
定义 装饰者(Decorator)模式是指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式。 装饰者模式可以动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 装饰者模式属于对象结构型模式。 要点 装饰者和被装饰对象有相同的超类型。 可以用一个或多个装饰者包装一个对象。 既然装饰者和被装饰对象有相同的超类型,所以在任何需要原始对象(...原创 2020-02-27 13:52:52 · 165 阅读 · 0 评论 -
桥接模式
定义 桥接模式(Bridge)将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。 【优点】 抽象与实现分离,扩展能力强; 实现细节对客户透明。 【缺点】 由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,增加了系统的理解与设计难度。 ...原创 2020-02-25 12:19:21 · 205 阅读 · 0 评论 -
适配器模式
定义 适配器模式(Adapter Pattern)将某个类的接口转换成客户期望的另一个接口表示,主要的目的是拥有兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。 适配器模式属于结构型模式。 主要分为两类:类(接口)适配器模式、对象适配器模式 例如在欧洲国家使用美国制造的笔记本电脑,可能需要使用一个交流电的适配器。 要点 从客户的角度看不到被适配者,是解耦的 客户调...原创 2019-12-27 18:20:20 · 126 阅读 · 0 评论 -
设计模式的七大原则及其分类
什么是设计模式? 设计模式(Design Pattern) ,这个术语最初并不是出现在软件设计中,而是被用于建筑领域的设计中,后来随着软件工程的发展,设计模式思想被引入到软件工程中。直到今天,狭义的设计模式还是人们广为流传的 23 种经典设计模式。 设计模式(Design pattern)代表了计算机软件工程最佳的实践,是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设...原创 2019-11-19 16:37:05 · 1002 阅读 · 0 评论 -
单例模式
定义 单例设计模式(Singleton),就是采取一定的方法保证在整个的软件系统中,某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。 要点 该类只能有一个实例 单例类自行创建实例 构造器私有化 向整个系统提供获取这个实例的统一访问方式 对外提供获取该实例对象的方式 (1)直接暴露;(2)公有静态方法 场景 某个类在整个系统中只能有一个...原创 2019-11-23 11:41:29 · 113 阅读 · 0 评论 -
工厂模式
定义 工厂模式(Factory Method)是由一个工厂对象决定创建出哪一种产品类的实例。定义一个创建对象的类,由这个类来封装实例化对象的行为。 一般情况下,我们称被创建的对象称为“产品”,把创建产品的对象称为“工厂”。 工厂模式有三类:简单工厂模式、工厂模式、 抽象工厂模式。 工厂模式属于创建型模式。 要点 抽象工厂(Abstract Factory):提供创建产品的接口,调用者...原创 2019-11-27 21:09:46 · 168 阅读 · 0 评论 -
原型模式
定义 当创建给定的实例的过程很昂贵或很复杂时,就是用原型模式(Prototype Pattern)。 用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象。 原型模式属于创建型模式。 要点 原型模式允许通过复制现有的实例来创建新的实例,在Java中,这通常意味着使用 clone() 方法或反序列化。 向客户影藏制造新实例的复杂性。 提供让客户能够产生未知类型对象的选项。...原创 2019-12-04 18:41:32 · 134 阅读 · 0 评论 -
建造者模式
定义 建造者模式(Builder Pattern)是一种对象构建模式,用来封装一个产品的构造过程,并允许按步骤构造产品。 建造者模式又叫生成器模式,建造者模式属于创建型模式。 要点 经常被用来创建组合结构 将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象 一步一步创建一个复杂的对象,允许用户只通过指定复杂对象的类型和内容就可以构...原创 2019-12-07 16:34:27 · 143 阅读 · 0 评论