摘要:定义 提供一种方法访问一个容器(container)对象中的各个元素,而又不暴露该对象的内部细节。 UML 优点 缺点 应用场景 示例 考虑这样一个需求,一家大公司合并了一家小公司,而两家公司的工资系统不一样,大公司使用List记录员工工资,小公司使用数组记录员工工资,而这两个不一样的工资系统需要合 阅读全文
行为类模式(三):解释器(Interpreter)
2016-10-27 14:48 by 阿诚de窝, 318 阅读, 0 推荐, 收藏,
摘要:定义 给定一个语言, 定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。 UML 优点 缺点 应用场景 示例 使用解释器模式完成一个两则运算器,要求输入表达式和每个符号的值得到表达式的最终结果。 Java 1 import java.io.BufferedReader; 阅读全文
行为类模式(二):命令(Command)
2016-10-27 14:42 by 阿诚de窝, 281 阅读, 0 推荐, 收藏,
摘要:定义 将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。 UML 优点 缺点 应用场景 示例 用命令模式模拟主机按下开机按钮后主机内部的开机流程。 Java 1 public class Main 2 { 3 public st 阅读全文
行为类模式(一):职责链(Chain Of Responsibility)
2016-10-27 14:39 by 阿诚de窝, 333 阅读, 0 推荐, 收藏,
摘要:定义 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。 将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 UML 优点 缺点 应用场景 示例 我们来实现一个场景,请求聚餐费用时,一般是把请求提交到项目经理处,项目经理可以处理500元以下的费用,如果费用 阅读全文
结构类模式(七):代理(Proxy)
2016-10-27 14:35 by 阿诚de窝, 392 阅读, 0 推荐, 收藏,
摘要:定义 为其他对象提供一种代理以控制对这个对象的访问。 代理模式也叫做委托模式,它是一项基本设计技巧。许多其他的模式,如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式,而且在日常的应用中,代理模式可以提供非常好的访问控制。 代理类负责对真实角色的应用,把所有抽象主题类定义的方法限制 阅读全文
结构类模式(六):享元(Flyweight)
2016-10-27 14:20 by 阿诚de窝, 229 阅读, 0 推荐, 收藏,
摘要:定义 运用共享技术有效的支持大量细粒度的对象。 两个状态 和对象池的区别 UML 优点 缺点 应用场景 示例 我们考虑一个场景,当我们需要自己实现绘制艺术字时,每一个字符都会有下面的几个状态:1.字体轮廓(这部分就是最耗内存的部分,每个字体都会有大量的数据来记录该字体的样式);2.字体字符(标志该字 阅读全文
结构类模式(五):外观(Facade)
2016-10-27 14:17 by 阿诚de窝, 377 阅读, 0 推荐, 收藏,
摘要:定义 为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。 UML 优点 缺点 应用场景 示例 假设我们的项目中有一个代码生成工具,用来生成供前后端使用的代码,客户端在调用时需要先加载配置文件,然后再依次生成前后端的代码文件,这个顺序不能乱掉。我们如果直接提 阅读全文
结构类模式(四):装饰(Decorator)
2016-10-27 14:13 by 阿诚de窝, 312 阅读, 0 推荐, 收藏,
摘要:定义 动态地将责任附加到对象上.若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 特点 UML 优点 缺点 应用场景 示例 实现一个奖金计算的程序,奖金的计算是比较复杂的,普通员工有每月的业绩奖金和累计奖金,如果是经理每月还有团队奖金,而公 阅读全文
结构类模式(三):组合(Composite)
2016-10-27 14:00 by 阿诚de窝, 354 阅读, 0 推荐, 收藏,
摘要:定义 将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 比较常见的有 阅读全文
结构类模式(二):桥接(Bridge)
2016-10-27 13:54 by 阿诚de窝, 304 阅读, 0 推荐, 收藏,
摘要:定义 将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化。 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度 阅读全文
浙公网安备 33010602011771号