摘要:"众口难调"出自宋·欧阳修《归田录》卷一:"补仲山之衮,虽曲尽于巧心;和傅说之羹,实难调于众口。"其原意是各人的口味不同,很难做出一种饭菜使所有的人都感到好吃。众口是否真的难调呢?其实有个不错的办法可以解决众口难调的问题,那就是吃"自助餐"。 面对众口难调的问题去吃"自助餐"已经不是什么新鲜事,承办一个几百人、几千人的会议往往采用的都是自助餐的方式,让来宾各取所需,这就是所谓的以不变应万变。用更通...
阅读全文
12 2004 档案
摘要:一、 策略(Strategy)模式 策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。 假设现在要设计一个贩卖各类书籍的电子商务网站的购物车(Shopping Cat)系统。一个最简单的情况就是把所有货品的单价乘上数量,但是实际情况肯定比这要复杂。比如,本网站可能对所有的教材类图书实行每本一元的...
阅读全文
摘要:一、 模板方法(Template Method)模式 准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模版方法模式的用意。 很多人可能没有想到,模版方法模式实际上是所有模式中最为常见的几个模式之一,而且很多人可能使用过模版方法模式而没有意识到自己已经使用了这个...
阅读全文
摘要:一、 访问者(Visitor)模式 访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。 问题提出 System.Collection命名空间下提供了大量集合操作对象。但大多数情况下处理的都是同类对象的聚集。换言之,在聚集上采取的操作都是一些针对同类型对象的同类操作。但是如果针对一个保存有不同类型对象的聚集采取某种操作该怎么办...
阅读全文
摘要:华容道系列-开篇 华容道与数据结构 (1) 六、 数据结构设计 针对上面说到的解题方法,设计如下的数据结构: 1、广度优先的树型结构 由于整个棋局的可行解可以描述成一个树型结构,并且为了得到最少移动步数需要采用广度优先的搜索算法,因此考虑将链表与树型结构整合起来,便于进行广度搜索。如图,当我们试图搜索第三步可行解时,只需要顺着第二步的链表依次搜索便可以实现了。 2、堆栈结构输出最少步数 ...
阅读全文
摘要:几天前给学生上课,一个学生问我用Delegate与Event实现Observer模式与不用它们实现到底有什么区别?我便讲了一个用奶箱订报纸的故事。 现在很多人都同时在订报纸和牛奶,送报纸的和送牛奶的也会在楼门口钉上一个箱子,一来方便,二来也为自己做做广告。现在楼门口前钉的大大小小都是箱子,几乎挤满了所有可用的地方。报箱是那种长长的,而奶箱子则有些四四方方,上面都开了可口,用来投递的。我家原来订了奶...
阅读全文
摘要:每年到这个时候,工会都要给每位教工发大米、油什么的。正好我家的米快吃完了,所以这两天就盼着发大米,可是等了好多天也没见什么动静,扳着手指头数数离年根还有多半个月呢,看我心急的。不过,盼大米的老师恐怕不只是我一个,都等着工会有什么动静就去领大米呢。 其实,这里面还有很多东西可以拿来说说呢。教工等着发大米是一个典型的观察者模式,当工会大米来了,教工就会做出响应。不过这观察也有两种说头:一种是拉(Pul...
阅读全文
摘要:续第一部分《华容道系列-开篇》 四、 棋盘布局存储方案 华容道棋盘布局经过优化后可以存储在4个字节中,确切的说是3字节零两个二进制位(10子)布局。经过简单调整后,也可以将12子布局存储在4个字节当中。不过12子布局的走法过于简单,所以在今后的文章中,布局全部指10子布局,软件只针对10子布局开发。设计方案如下: 上图演示了两种布局的存储结构。棋子总共分成5类,分别是最大子、横放、竖放、卒...
阅读全文
摘要:本系列内容将分成两大部分:《华容道与数据结构》以及《华容道与设计模式》,两者之间会有一些交叉。 一、 序言 这个学期给学生上《设计模式》的课程,有些学生提出找些题目练练手,增强一些实战经验,我决定让他们编写"华容道"游戏。说实在的,当时并没有深思熟虑。后来自己仔细想想,发现这里面东西还真不少,甚至包括下学期我才给他们开设的课程《数据结构》中的大量内容。所以我决定自己先来尝试一下。 其实编写"华容道...
阅读全文
摘要:话说《三国演义》中,周瑜与孙权定下计谋,以孙权之妹为诱饵,骗刘备过江到东吴招亲,想趁机杀害刘备,索回荆州。诸葛亮早识破了诡计,令武将赵云随同并护卫刘备前往,并给赵云了三个锦囊,嘱咐他依次执行即可。结果,赵云按照诸葛亮的锦囊妙计行事,不仅帮助刘备将孙权之妹孙尚香夫人迎娶回来,还得到孙权之母吴国太的欢心,陪同刘备夫妇回了荆州。《三国演义》这段记叙,为后世创造了“锦囊妙计”和“赔了夫人又折兵”两个成语。...
阅读全文
摘要:一、 观察者(Observer)模式 观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 一个软...
阅读全文