1. 设计模式
是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 2. 模板
模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 3. 模式
就是解决某一类问题的方法论。把解决某类问题的方法总结归纳到理论高度,那就是模式。 4. 内聚度
模块内部各成分彼此结合的紧密程度。
5. 什么是设计模式?设计模式的目标是什么?
设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 6. 设计模式的基本要素有哪些?
名称,意图,问题,解决方案,参与者和协作者,效果,实现,GOF参考。 7. 设计模式中一般都遵循的原则有什么?
开-闭原则,根据场景进行设计原则,优先组合原则,包容变化原则。 8. 四人团针对“创建优秀面向对象设计”建议了哪些策略?
针对接口编程,优先使用对象组合而不是类继承,找到并封装变化点。
简答题
1.什么是设计模式?设计模式的目标是什么?
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 2. Strategy模式的意图是什么吗?它有哪些效果?
意图是让你可以使用不同的业务规则或算法-----取决于它们出场的场景。效果有:Strategy(策略)模式定义了一系列的算法;switch语句或条件语句得到了避免;你必须以相同的方式调用所有的算法(它们必须拥有相同的接口)ConcreteStrategies与Context之间的交互可能需要在Context中加入getState之类的方法。
3. Strategy(策略)模式对问题的解决方案是什么?以及如何实现?
解决方案是:将算法的选择和算法的实现相分离。让客户可以基于场景做出选择。实现:让使用算法的类包含一个抽象类,抽象类中有一个抽象方法指定如何调用算法。每个派生类根据需要实现算法。
4. Decorator(装饰)模式的效果是什么? 被添加的功能属于小的对象。好处是可以在ConcreteComponent对象的功能之前或之后动态添加功能。虽然一个装饰者可以在被装饰者之前或之后添加功能,但对象链总是以ConcreteComponent对象结束。 5 设计模式的基本要素有哪些?
名称,意图,问题,解决方案,参与者和协作者,效果,实现,GOF参考。 6. Strategy(策略)模式是建立在哪些原则的基础上?
主要建立在:对象拥有责任;这些责任的不同的特定实现通过使用多态来表现;需要将几个不同的实现按照-----概念上------相同的算法来管理;一个好的设计经验:将问题领域中发生的行为彼此分离------也就是说,使它们解耦。这让改变对某一行为负责的类,而不会对其他行为产生不好的影响。
7. 按照四人团的说法,Strategy策略模式的基本思想是什么?
定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换,使算法可独立于使用它的客户而变化。
8. Decorator(装饰)模式的解决方案是什么?如何实现?
解决方案是允许扩展一个对象的功能,而不必借助于子类型化。实现:创建一个抽象类来表示原始的类和要添加到这个类上的新功能。在装饰者类中,将“对新功能的调用”放在“对紧随其后对象的调用”之前或之后,以获得正确的顺序。
应用题
1. 根据你对Bridge 模式的理解,概要描述使用该模式的应用要求,并给出相应的设计类图。当存在一个抽象有不同实现时Bridge模式最为有用,它可以使抽象和实现相互独立地进行变化。
2. 举例说明使用Bridge 模式的场合,给出在该场合下使用Bridge 模式的解决方案,并说明该解决方案的优点。
打印驱动程序是Bridge模式最典型的例子,也是最适合应用Bridge模式的场合。Bridge模式的真正威力在于它能够帮助我们看到什么时候应该从问题域中提取实现。也就是说,有时候有一个实体X使用系统S,一个实体Y使用系统T。我们可能认为X总是与S相伴,而Y总是与T相伴,因此就将它们联系(耦合)起来。Bridge模式提醒我们,可以抽象出S和T,这样更好,也就是说,Bridge模式最有用的地方,是在解耦抽象与实现之前考虑Bridge模式是否适用。
3. 请结合实际应用说明Decorator模式是怎样对问题按功能进行分解?
Decorator模式并不通过一个控制方法控制新增功能,而是建议以需要的正确顺序将所需功能串联起来,进行控制。Decorator模式将这样一个功能链的动态构建与使用功能的客户分离开来。而且还将功能链的构建与链组件分离开来。这样就能灵活使用这些组件,比如,表头,页脚和SalesTicket分离开来。
4. 在一个国际电子零售系统中,需要考虑为不同的国家的消费者的定单计算税费问题,请用模式的方法考虑如何解决该问题。
通过Strategy模式,可以将这些规则封装在一个抽象类中,然后派生出一系列的具体类。通过从一个抽象派生类执行算法的所有不同方式,主模块就无需再操心实际使用的是哪一个,这样能够允许发生新的变化。
5. 请结合抽象工厂模式,说明在实际应用中如何生成正确的对象。
决定需要哪个工厂对象实际上与确定使用哪一组对象是相同的。例如,在驱动程序问题中,有一组低分辨率动程序和一组高分辨率驱动程序,怎样才能知道自己需要哪一组呢? 在类似这样的例子中,很可能通过一个配置文件获知这一信息。然后可以编写几行代码,根据配置信息将合适的工厂对象实例化。还可以使用Abstract Factory模式,不同应用程序都使用同一子系统。在这种情况下,工厂对象将传给子系统,告诉子系统将要使用哪些对象,此时,通常主系统知道子系统需要那一组对象,在调用子系统之前,将实例化正确的工厂对象。 6 请结合实际应用说明Decorator模式是怎样对问题按功能进行分解?
Decorator模式并不通过一个控制方法控制新增功能,而是建议以需要的正确顺序将所需功能串联起来,进行控制。Decorator模式将这样一个功能链的动态构建与使用功能的客户分离开来。而且还将功能链的构建与链组件分离开来。这样就能灵活使用这些组件,比如,表头,页脚和SalesTicket分离开来
7. 给出Observer的定义以及它的意图,举一个例子说明该模式的适用场景,最后画出它的类图。
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象
都得到通知并被自动更新。解决的问题是当某个事件发生时,你需要向一系列对象发出通知,而这个对象的列表是不断变化的。例如,在Subject对象注册了它的一个Observer对象,当事件发生时,Subject对象向Observer对象发出通知就非常简单了。为了实现这一功能,每个Observer类都实现一个叫做updata的方法。Subject类这样实现notify方法:遍历自己的Observer对象列表,调用其中每个Observer对象的updata方法。Updata方法应该包含处理事件的代码。
8. 根据你的理解,请你谈谈结构型和行为型模式的区别,并结合实际的应用举例说明。 结构型模式的目的是将现存的对象结合在一起,用途是处理接口,将实现与抽象类联系起来。而行为型模式的目的是提供一种显得灵活的行为,用途是包容变化的。例子:结构型模式中的Bridge模式或Decorator模式与行为型模式中的Strategy模式的比较。 9.请根据下面的叙述,选择正确的设计模式,并给出该设计模式的类图。 为实现应用的界面与应用数据的分离,通常定义应用数据的类和应用界面类,它们都可以各自独立地被复用,当然它们也可一起工作。一个表格对象和一个柱状图对象可使用不同的表示形式描述同一个应用数据对象的信息。表格对象和柱状图对象互相并不知道对方的存在,这样使你可以根据需要单独复用表格或柱状图。但是它们表现的似乎互相知道彼此的存在。当用户改变表格中的信息时,柱状图能立即反映这一变化, 反过来也是如此。请根据叙述和上图的描述,选择合适的设计模式,并给出该设计模式的类图。
10.一般的企业采购审批都是分级的,采购量的不同就需要不同层次的主管人员来审批,如主任可以审批1 万元以下的采购单,副董事长可以申批2.5 万元以下的采购单,董事长可以审批10万元以下的采购单,10 万元以上的采购单就需要开会决定。请根据该描述,选择合适的设计模式并给出其类图。

