随笔分类 - 设计模式
写出更优雅的代码,便于维护
摘要:案例:计算每位顾客的消费金额并打印详细信息。顾客租赁了哪些影片,租期多长,根据租赁时间和影片类型计算出费用。影片分为3类:儿童片,新片,普通片。此外需计算该顾客的积分。 Movie: Resume:该顾客租赁了一部影片 Customer: 租赁费用计算: 影片类型为儿童片,两天以内费用为2,超出两天
阅读全文
摘要:定义:迭代子模式又叫游标(Cursor)模式,是对象的行为模式。迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象(internal representation)。 聚集:多个对象聚在一起形成的总体,聚集对象是能够包容一组对象的容器对象。聚集依赖于聚集结构的抽象化,具有复杂化和多样性
阅读全文
摘要:定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态 类图: 结构: 发起人:记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据。 备忘录:负责存储发起人对象的内部状态,在需要的时候提供发起人需要的内部
阅读全文
摘要:定义:解释器模式是一种按照规定语法进行解析的方案,给定一个语言, 定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。实际上可以理解为是一个编译器(esclipse或者vc)或者是正则表达式。 类图: 以加减运算为例 业务需求:输入一个模型公式(加减四则运算),然后输入模
阅读全文
摘要:定义:策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。 类图: 优点: (1)策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了一个算法或行为族。恰当使用继承可以把
阅读全文
摘要:定义:责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。 责任链可
阅读全文
摘要:命令模式 定义:命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。 代码:(以录音机为例) 录音机类:具体方法实现 命令接口: 具体命令实现:等等 宏命令接口: 宏命令接口实现: 键盘类: 客户端: 结
阅读全文
摘要:访问者:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 当需要改变其中一项业务的处理时,不需要每个地方都进行修改,而只需要改动Visitor类中相应的处理函数就可以了。也就是说它适合于业务处理时常发生变动的情况。 当然,Visitor也有它
阅读全文
摘要:观察者模式 定义:定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。 类图: 多个[观察者]观察[被观察者]的状态,当[被观察者]的状态发生改变时,[观察者】自己的状态也随着发生变化。 被观察者有三个方法:attach方法是向这个容器中添加观察者对
阅读全文
摘要:中介者模式 定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。 类图: 中介者模式结构:抽象中介者、中介者实现、同事类 使用中介者模式的原因: 多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构 如果引入中介
阅读全文
摘要:在总结模板模式之前先复习一个小知识: public、protected、private之间的区别:public在实例化之后可以直接在类外调用,protected和private不可以在类外调用。在子类继承的时候可以继承父类的protected和public属性方法,不能继承private方法 模板模
阅读全文
摘要:原型模式: 定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 通俗来说就是,先创建一个原型类,然后在里面写一个实现Cloneable接口(这个是java自带的)的函数clone(这个函数中需要调用clone函数【因为在父类中clone函数是protected不能直接调用,所以要
阅读全文