软件设计模式复习题

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

软件设计模式复习题

1、熟悉每个设计模式的定义、模式UML图解、模式使用情形以及模式优缺点。

2、设计模式的两大主题是什么?

3、设计模式分成几大类?每大类各包含哪些模式?

4、为什么要使用设计模式?使用设计模式有哪些好处?

5、比较抽象工厂模式和工厂方法模式相似性和差异性。什么情况下使用抽象工厂模式?什

么情形下使用工厂方法模式?

6、简述原型模式中浅层克隆和深度克隆的区别?分别给出代码说明。

7、模板方法和普通的实现类继承抽象类方式有何区别?

8、是比较和分析适配器模式和桥接模式之间的共性和差异性。

9、请用组合模式实现学校人事管理模式。

10、综合应用装饰模式、命令模式和状态模式实现工具条命令按钮鼠标进入时高亮显示

状态以及鼠标单击按钮后呈现凹陷状态,表明当前按钮为选中状态。

11、请阐述享元模式是如何节省系统内存的?试举例分析使用享元模式前后的内存节

约之比。

12、使用解析器模式实现对学生成绩表的查询输入语句进行解析并执行查询,成绩表结

14、试比较和分析中介者模式和观察者模式之间的相似性和差异性?两者是否能够相

互转化?

15、模板方法和普通的抽象类继承有什么区别?

16、使用访问者模式对12题中的学生信息进行报到。

1、熟悉每个设计模式的定义、模式UML图解、模式使用情形以及模式优缺点。(见书)答:单件模式:

○1单例模式:class Singleton{private static Singleton instance;

private Singleton(){}

public static Singleton GetInstance(){if (instance == null) {

instance = new Singleton();}

return instance; }

客户端代码:class Program{static void Main(string[] args) {

Singleton s1 = Singleton.GetInstance();

Singleton s2 = Singleton.GetInstance();

if (s1 = = s2) {Console.WriteLine("Objects are the same instance");} Console.Read();}}

○2多线程时的单例(Lock是确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放)class Singleton{private static Singleton instance;

private static readonly object syncRoot = new object();

private Singleton(){}

public static Singleton GetInstance(){lock (syncRoot) {

if (instance == null) { instance = new Singleton(); }} return instance ;} }

双重锁定:不用让线程每次都加锁,而只是在实例未被创建的时候再加锁处理。同时也能保证多线程的安全性。

class Singleton{private static Singleton instance;

private static readonly object syncRoot = new object();

private Singleton(){ }

public static Singleton GetInstance(){if (instance == null) {

lock (syncRoot) {

if (instance == null) { instance = new Singleton();}}}

return instance;}

静态初始化:不需要开发人员显示地编写线程安全代码,即可解决多线程环境下它是不安全的问题。

public sealed class Singleton{

private static readonly Singleton instance=new Singleton();

private Singleton(){}

public static Singleton GetInstance(){return instance; }}

组合模式:

●透明方式:在Component中声明所有用来管理子对象的方法,其中包括Add、Remonve

等。这样实现Component接口的所有子类都具备了Add和Remove。这样做的好处就是叶节点和枝节点对外界没有区别,他们具备完全一致的行为接口。

●安全方式:在Component接口中不去声明Add和Remove方法,那么子类的Leaf也就不

要去实现它,而是在Composite声明所有用来管理子类对象的方法。由于不透明,客户端要做判断。

外观模式:

创建的Façade

2、设计模式的两大主题是什么?

答:对象组合,类继承的讨论

3、设计模式分成几大类?每大类各包含哪些模式?

答:

模式大体上分为3类,分别从对象的创建、对象的结构和对象的行为这3个方面来总结软件开发人员在设计方面的经验。

(1)创建型模式

单件模式(Singleton):单例模式确保某一个类有且仅有一个实例,并且提供了一个全局的访问点,切自行实例化并向整个系统提供这个实例。

抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。(抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据LSP原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。换言之,也就是这些抽象产品的具体子类的实例。工厂类负责创建抽象产品的具体子类的实例。)

建造者模式(Builder):将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立地变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。

工厂方法模式(Factory Method):抽象工厂类负责定义创建对象的接口,具体对象的创建工作由实现抽象工厂的具体工厂类来完成。工厂类不再负责所有产品的创建,而是将具体的创建工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。

原型模式(Prototype):通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。

(没有的)简单工厂模式(Simple Factory):定义一个具体的工厂类来负责创建一些类的实例,而这些被创建的类都应该有一个共同的父类,这样就可以实现面向抽象而不是面向具体编程。客户类和工厂类分开,客户类任何时候需要某种产品,只需向工厂请求即可,客户类无需修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。

(2)结构型模式

适配器模式(Adapter):把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。(将类自己的接口包裹在一个已存在的类中。)

桥接模式(Bridge):将抽象化与实现化脱耦,使得两者可以独立地变化,也就是指在一个软件系统的抽象化和实现化之间使用组合关系而不是继承关系,从而使两者可以独立地变化。

装饰模式(Decorator):装饰模式以对客户端透明的方式扩展对象的功能,是继承关

相关文档
最新文档