欢迎来到天天文库
浏览记录
ID:50529760
大小:339.00 KB
页数:26页
时间:2020-03-10
《软件设计模式复习题.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、软件设计模式复习题1、熟悉每个设计模式的定义、模式UML图解、模式使用情形以及模式优缺点。2、设计模式的两大主题是什么?3、设计模式分成几大类?每大类各包含哪些模式?4、为什么要使用设计模式?使用设计模式有哪些好处?5、比较抽象工厂模式和工厂方法模式相似性和差异性。什么情况下使用抽象工厂模式?什么情形下使用工厂方法模式?6、简述原型模式中浅层克隆和深度克隆的区别?分别给出代码说明。7、模板方法和普通的实现类继承抽象类方式有何区别?8、是比较和分析适配器模式和桥接模式之间的共性和差异性。9、请用组合模式实现学校人事管理模式。10
2、、综合应用装饰模式、命令模式和状态模式实现工具条命令按钮鼠标进入时高亮显示状态以及鼠标单击按钮后呈现凹陷状态,表明当前按钮为选中状态。11、请阐述享元模式是如何节省系统内存的?试举例分析使用享元模式前后的内存节约之比。12、使用解析器模式实现对学生成绩表的查询输入语句进行解析并执行查询,成绩表结构如下:学号姓名专业班级课程代码课程名称课程性质任课教师成绩13、结合命令模式和备忘录模式实现程序的undo和redo功能。14、试比较和分析中介者模式和观察者模式之间的相似性和差异性?两者是否能够相互转化?15、模板方法和普通的抽象类
3、继承有什么区别?16、使用访问者模式对12题中的学生信息进行报到。1、熟悉每个设计模式的定义、模式UML图解、模式使用情形以及模式优缺点。(见书)答:单件模式:单例模式:classSingleton{privatestaticSingletoninstance;privateSingleton(){}publicstaticSingletonGetInstance(){if(instance==null){instance=newSingleton();}returninstance;}客户端代码:classProgram{s
4、taticvoidMain(string[]args){Singletons1=Singleton.GetInstance();Singletons2=Singleton.GetInstance();if(s1==s2){Console.WriteLine("Objectsarethesameinstance");}Console.Read();}}多线程时的单例(Lock是确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放)classSing
5、leton{privatestaticSingletoninstance;privatestaticreadonlyobjectsyncRoot=newobject();privateSingleton(){}publicstaticSingletonGetInstance(){lock(syncRoot){if(instance==null){instance=newSingleton();}}returninstance;}}双重锁定:不用让线程每次都加锁,而只是在实例未被创建的时候再加锁处理。同时也能保证多线程的安全性。
6、classSingleton{privatestaticSingletoninstance;privatestaticreadonlyobjectsyncRoot=newobject();privateSingleton(){}publicstaticSingletonGetInstance(){if(instance==null){lock(syncRoot){if(instance==null){instance=newSingleton();}}}returninstance;}静态初始化:不需要开发人员显示地编写线程安
7、全代码,即可解决多线程环境下它是不安全的问题。publicsealedclassSingleton{privatestaticreadonlySingletoninstance=newSingleton();privateSingleton(){}publicstaticSingletonGetInstance(){returninstance;}}组合模式:l透明方式:在Component中声明所有用来管理子对象的方法,其中包括Add、Remonve等。这样实现Component接口的所有子类都具备了Add和Remove。这
8、样做的好处就是叶节点和枝节点对外界没有区别,他们具备完全一致的行为接口。l安全方式:在Component接口中不去声明Add和Remove方法,那么子类的Leaf也就不要去实现它,而是在Composite声明所有用来管理子类对象的方法。由于不透明,客户端要做判断。外观模式:创
此文档下载收益归作者所有