随笔分类 -  软件设计模式

摘要:三大特性: 1、封装 把客观的事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的类进行信息的隐藏。 2、继承 继承是父类和子类之间共享数据和方法的一种机制。 3、多态 在收到消息时,对象要予以响应。不同的对象收到同一消息可以产生完全不同的结果,这一现象称为多态。 五 阅读全文
posted @ 2020-02-01 11:26 ho966 阅读(398) 评论(0) 推荐(0)
摘要:1) 意图 表示一个作用于某对象结构中各元素的操作。它允许在不改变各个元素的类的前提下定义作用于这些元素的新操作 2) 结构 其中: Visitor为该对象结构中ConcreteElement的每个类声明一个Visit操作 ConcreteVisitor实现每个有Visitor声明的操作 Eleme 阅读全文
posted @ 2020-01-31 16:27 ho966 阅读(250) 评论(0) 推荐(0)
摘要:1) 意图 定义一个操作中的算法骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可以重定义该算法的某些特定步骤 2) 结构 其中: AbstractClass(抽象类)定义抽象的原语操作,具体的子类将重定义它们以实现一个算法的各步骤;实现模板方法,定义 阅读全文
posted @ 2020-01-31 14:40 ho966 阅读(265) 评论(0) 推荐(0)
摘要:1) 意图 定义一系列算法,把它们一个个封装起来,并且可以使它们可以相互替换。此模式使得算法可以独立于使用它们的客户而变化(行为定义为一个类) 2) 结构 其中: Strategy定义所有支持的算法的公共接口 ConcreteStrategy 定义某个具体算法 Context通过Strategy接口 阅读全文
posted @ 2020-01-28 22:55 ho966 阅读(206) 评论(0) 推荐(0)
摘要:1) 意图 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类 2) 结构 其中: Context定义客户感兴趣的接口,维护一个ConcreteState子类的实例,这个实例定义当前状态 State定义一个接口以封装与Context的一个特定状态相关的行为 ConcreteSta 阅读全文
posted @ 2020-01-28 22:36 ho966 阅读(299) 评论(0) 推荐(0)
摘要:1) 意图 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新 2) 结构 Subject提供注册和删除观测者的接口 Observer 定义一个抽象的更新接口 ConcreteSubject 是实际被观测的对象,当状态改变时,通知各个观测者 Con 阅读全文
posted @ 2020-01-28 17:35 ho966 阅读(172) 评论(0) 推荐(0)
摘要:1) 意图 在不破坏封装性的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态。这样可以将对象恢复到原先保存的状态 2) 结构 其中 Memento (备忘录)存储Originator内部状态 Originator(原发器)创建一个Memento,用于记录当前时刻它的内部状态 Caretake 阅读全文
posted @ 2020-01-28 16:51 ho966 阅读(156) 评论(0) 推荐(0)
摘要:1) 意图 用一个中介对象来封装一系列的对象交互,中介者使各个对象不需要显示地相互应用,从而使其耦合松散,并且可以独立地改变它们之间的交互 2) 结构 其中: Mediator定义一个接口用于各同事对象的通信 ConcreteMediator 通过协调各个Colleague 类对象实现协助行为 Co 阅读全文
posted @ 2020-01-28 12:59 ho966 阅读(218) 评论(0) 推荐(0)
摘要:1) 意图 提供一种方法顺序访问一个聚合对象中的各个元素,且不需要暴露该对象的内部表示 2) 结构 其中: Iterator定义访问和遍历元素的接口 ConcreteIterator实现迭代器接口,对该聚合遍历时跟踪当前位置 Aggregate定义创建相应迭代器对象的接口 ConcreteAggre 阅读全文
posted @ 2020-01-27 00:44 ho966 阅读(201) 评论(0) 推荐(0)
摘要:1) 意图 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子 2) 结构 其中 AbstractExpression声明一个抽象的解释操作 TerminalExpression(终结符解释器)实现与文法中的终结符相关联的解释操作 NonterminalE 阅读全文
posted @ 2020-01-26 10:28 ho966 阅读(373) 评论(0) 推荐(0)
摘要:1) 意图 将一个请求封装为一个对象,从而使得可以用不同的请求对客户进行参数化;可以对请求排队或记录日志,以及撤销的操作 2) 结构 其中 Command 声明执行操作的接口 ConcreteCommand 将一个接受者对象绑定于一个动作 Client创建一个具体命令对象并设定它的接受者 Invok 阅读全文
posted @ 2020-01-26 09:53 ho966 阅读(246) 评论(0) 推荐(0)
摘要:1) 意图 使多个对象连成一条链,沿着这条链传递请求,直到有个对象处理它为止。 2) 结构 其中: Handler定义一个处理请求的接口 ConcreteHandler处理它所负责的请求 Client向链上具体处理提交请求 3) 适用性 有多个对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定 阅读全文
posted @ 2020-01-25 21:31 ho966 阅读(318) 评论(0) 推荐(0)
摘要:1) 意图: 为其他对象提供一种代理以控制对这个对象的访问 2) 结构: 其中: Subject定义了 Proxy 和 RealSubject 的公有接口 Proxy 保存一个引用,实现代理访问实体 RealSubject定义了实体 3) 适用性: 复杂的指针代替简单的指针的时候,例如:远程代理、虚 阅读全文
posted @ 2020-01-24 14:52 ho966 阅读(254) 评论(0) 推荐(0)
摘要:1) 意图: 运用共享技术有效的支持大量细粒度的对象。(理解享元模式,主要是对象被分解成intrinsic和extrinsic两部分,即内部的共享状态和外部状态) 2) 结构: 其中: Flyweight描述一个接口,通过这个接口Flyweight可以接受并作用于外部状态 ConcreteFlywe 阅读全文
posted @ 2020-01-24 11:36 ho966 阅读(187) 评论(0) 推荐(0)
摘要:1) 意图: 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得子系统更加容易使用 2) 结构: 3) 适用性: 为一个复杂子系统提供一个简单接口时 为了提高子系统的独立型和可移植性 当需要构建一个层次结构的子系统时,使用Facade模式定义子系统每层的入口点 阅读全文
posted @ 2020-01-23 23:21 ho966 阅读(168) 评论(0) 推荐(0)
摘要:1) 意图: 动态的给一个对象添加一些额外的职责,相比较通过生成子类添加职责的方法更加灵活 2) 结构: 其中: Component定义对象接口 ConcreteComponent定义一个派生对象 Decorator维持一个指向父类的指针,并定义一个同样的接口 ConcreteDecorator实现 阅读全文
posted @ 2020-01-23 23:04 ho966 阅读(220) 评论(0) 推荐(0)
摘要:1) 意图: 将对象的组合成树型结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和整个对象的使用具有一直性 2) 结构: 其中: Component 为组合中的对象声明接口 Leaf表示“部分”的叶节点 Composite 存储所有的节点,这样实现统一操作“整体”对象 3) 阅读全文
posted @ 2020-01-23 22:32 ho966 阅读(304) 评论(0) 推荐(0)
摘要:1) 意图: 将实现和抽象分离,是它们可以独立的变化 2) 结构: 其中: a. Abstraction定义对外的接口 b. Implementor定义实现类的接口,是Abstraction的成员指针 c. ConcreteImplementor实现Implementor的具体实现 3) 适用性: 阅读全文
posted @ 2020-01-23 19:43 ho966 阅读(210) 评论(0) 推荐(0)
摘要:1) 意图: 将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 2) 结构: 适配器两种结构,一种继承实现,一种组合实现 a. 继承方式: b. 组合方式: 其中: Target定义Client使用的与特定领域相关的接口 Client与符合 阅读全文
posted @ 2020-01-23 19:13 ho966 阅读(222) 评论(0) 推荐(0)
摘要:1) 意图: 保证一个类仅有一个实例,并且提供一个访问它的全局访问点 2) 结构: 其中: Singleton提供一个instance操作,这是其他客户访问该类的唯一实例。 保证唯一实例有以下操作: 构造函数和析构函数不对外开放 声明一个对外公开的静态函数作为访问该类的唯一接口 单例函数中声明一个静 阅读全文
posted @ 2020-01-22 23:15 ho966 阅读(562) 评论(0) 推荐(0)