摘要:
解释器(interpreter)模式 意图:给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。 主要解决:对于一些固定文法构建一个解释句子的解释器。 代码: 阅读全文
摘要:
访问器(visitor)模式 意图:主要将数据结构与数据操作分离。主要解决:稳定的数据结构和易变的操作耦合问题。 代码: 效果: 阅读全文
摘要:
备忘录(Memento)模式 意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 主要解决:所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。何时使用:很多时候我们总是需要记录一个对象 阅读全文
摘要:
中介者(Mediator)模式 意图:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 主要解决:对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象 阅读全文
摘要:
观察者(Observer)模式也称为发布-订阅(publish-subscribe)模式,目标就是通知的发布者(发送通知),观察者就是通知的订阅者(接收通知,被通知) 意图: 定义对象间一对多的依赖关系,使得一个对象被改变,其他对象被更新 代码: 效果: 阅读全文
摘要:
意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。 代码: 效果: 阅读全文
摘要:
从键盘输入一个整数(1~20)则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。例如:输入数字2,则程序输出:1 24 3输入数字3,则程序输出:1 2 38 9 47 6 5输入数字4, 则程序输出:1 2 3 412 13 14 511 16 15 610 9 8 阅读全文
摘要:
1.每次可以走1步,或两步,求走n级台阶的方案个数 分析,其实就是斐波那契数列,无论怎么走,最后一步要么走1级,要么走2级,所以n级方案等于n-1级和n-2级方案之和 对于上述方案,当n很大时用时会非常长。因为中间存在大量重复的计算结果,例如当n=45时: walkStairs(45) = walk 阅读全文
摘要:
例如: 从5个不同的球(A B C D E)中取3个共有10中情况 如下图: A B C A B D A B E A C D A C E A D E B C D B C E B DE C D E 下假设将C球图上颜色,则上面的10中情况,可细分为包含涂色的球(3个球中一个已确定,剩余两球在四种求中选 阅读全文
摘要:
有5个球(A B C D E),先要从中选出3个,求所有可能的情况。 思路: 对于每个球,只有两种状态,选择与非选择 从A球开始,如果选择了A球,则需要从剩下的(B C D E)球中选择2个球 如果不选A球,则需要从剩下的(B C D E)球中选择3个球 分别继续递归,知道待选的球数目为0 Java 阅读全文