软件框架的主题类型
选择2010 x2’
判断1010 x 1’
简答306 X5’
设计4010’15’15’
简答重点(共6题,共30分) 1、什么是设计模式,其目标是什么? 应该遵守哪个原则?什么是设计模式:
设计模式是由许多优秀的软件系统总结出的成功的可复用设计方案
目标:
软件设计目标:准确性、健壮性、灵活性、复用性、效率
出色的设计特色:可扩展性、灵活性和可插入性
面向对象的三个特征:继承性、封装性和多态性
原则:
依赖倒置原则(DIP)
默默的路人替换原则(LSP)
接口分离原则(ISP)
单一职责原则(SRP)
开闭原则(OCP)
2、中介人模型的定义是什么? 定义、使用场景和角色说明定义:用一个中介对象封装一组对象的交互。 中介者不需要明确地交叉引用各个对象,结合变得松散,并且可以独立地改变它们之间的相互作用。
使用场景1由于一个对象引用了许多其他对象,因此很难重用该对象。
角色说明:
中介是定义同事对象之间的通信方式的接口
中介(ConcreteMediator )实现中介接口的类。 具体中介应包括所有具体同事的引用,通过实现中介接口满足具体同事之间的通信要求。
同事:规定了特定同事需要实现的方法的界面。
具体同事:实现同事界面的班级。 具体同事需要包括具体中介的引用,如果一个具体同事需要与其他具体中介进行对话,只需发送给具体中介,包括自己的通信。
3、代理模式的定义是什么? 提供代理以控制对其他对象的访问
4、享元模式的定义是什么? 利用共享模式,有效支持细粒度对象。
5、状态模式的定义是什么? 如果在对象的内部状态发生变化时更改对象的行为,则对象看起来像是修改了类。
6、常用的设计模式是什么? 请列举10种以上。 责任链模式
观察者模式
享元模式
代理模式
状态模式
单件模式
中间人模式
备忘录模式
装饰模式
7、谈谈你对设计模式的认识。 设计模式是软件设计的实战经验、技巧的总结,最终的设计目标是使软件具有更高的性能、价值。 具体来说,设计目标主要是可用性、可维护性、灵活性、可插入性。 设计模式还源于对一些软件工程理论的总结,遵循一定的设计原则,有一套比较经典的“面向对象设计原则”,它是世界万物由各种各样的对象组成,对象是抽象的、封装的在软件开发中的运用,体现在“软件包”维护和促进系统的可维护性; “继承”使概念和定义可重用; “多态性”可以复用实现和应用。
面向对象的设计原则包括封装变化、接口隔离原则、合成复用原则、开闭原则、依赖倒带原则、幸福飞鸟原则、好莱坞原则、单一责任原则、安静行人交替原则。
这些原则方法指导您在理解和使用设计模式时,不可以使用它来使用设计模式。 另外,必须记住上述的设计原则、设计目标,恰当地选择设计模式。 根据情况也可以不使用设计模式。 如果具体分析,滥用设计模式,就有可能违背软件设计的原则、目标,甚至适得其反。
8、观察者模式的定义是什么? 定义对象之间的多对多依赖关系,当对象的状态发生变化时,所有依赖对象都会被通知并自动更新。
9、适配器模式的定义是什么? 包括定义、使用场景、角色说明。定义:将一个类的接口转换为客户想要的另一个接口。 Adapter模式允许由于接口不兼容而无法一起工作的类一起工作。
使用场景:程序尝试使用已存在的类,但该类实现的接口与当前程序使用的接口不匹配。
角色说明
目标:目标是用户想要使用的界面
被适配器:被适配器是已存在的接口或抽象类,此接口或抽象类必须适配器
适配器:适配器是实现目标接口并包含对被适配器的引用的类。 这意味着适配器的作用是使被适配器接口与目标接口相匹配。
10、工厂模型的定义是什么? 定义用于创建对象的接口,以便子类可以决定实例化哪个类。 Factory Method会将类的实例化延迟到子类。
11、抽象工厂模型的定义是什么? 提供用于创建一组对象或相互依存对象而不指定特定类的接口。
12、建设者模式的定义是什么? 包括定义、使用场景、角色说明。定义:分离复杂对象的结构及其表示
,使得同样的构建过程可以创建不同的表示。使用场景:需要生成的产品对象有复杂的内部结构,这些产品对象具备共性;
隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。
角色说明:
Product 产品:通常是实现了模板方法模式,也就是有模板方法和基本方法,
Builder :抽象建造者,规范产品的重组,一般由子类完成
ConcreteBuilder:具体建造者,实现抽象类定义的所有方法,并且返回一个好的对象.
Director :导演类,负责安排已有模块的顺序,然后开始告诉builder 建造 13、责任链模式的定义是什么?包括定义,使用场景,角色说明
定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
使用场景:有许多对象可以处理用户的请求,希望程序在运行期间自动确定可以处理用户的对象。
希望用户不必明确地指定接收者的情况下,向多个接受者的一个提交请求。
程序希望动态制定可处理用户请求的对象集合。
角色说明:
处理者:处理者是一个接口,负责规定具体处理者处理用户请求的方法以及具体处理者设置后继对象的方法。
具体处理者:具体处理者是实现处理者接口的类的实例。具体处理者通过调用处理者接口规定方法处理用户的请求,在执行该方法的过程中,如果发现能处理该请求,就处理有关数据,否则将请求传递给自己的后继者。
动态地给对象添加一些额外的职责。就功能来说装饰模式比生成子类更为灵活。
15、策略模式的定义是什么?定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换。本模式可以使得算法可独立于它们的客户而变换。
16、门面模式的定义是什么?门面模式,是指提供一个统一的接口去访问子系统的多个不同的接口,它为子系统的一组接口提供一个统一的高层接口。从而使子系统更容易使用。
17、备忘录模式的定义是什么?在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。
选择填空(选择20 10X2’ 判断10 10X1’)可以参考这个https://wenku.baidu.com/view/7a0ea5c6250c844769eae009581b6bd97f19bcd0.html
主要考察了设计模式的原则(如默默的路人替换。。)、类型(如建造型。。),各个模式的定义和适用范围。
依赖倒置原则(DIP):要依赖于抽象,不要依赖于具体:也就是说,抽象不应当依赖于细节,细节应当依赖于抽象;要针对接口编程,不要针对实现编程。
默默的路人替换原则(LSP):子类能替换其超类(is-a 关系),也就是说子类型(subtype)必须能替换其基类型(base type)。
接口分离原则(ISP):使用多个专门的接口比使用单一的总接口更好;换言之,从一个客户类的角度来讲:一个类对另外一个类的依赖性应当是建立在最小的接口之上的;不应该强迫客户程序依赖于它们不用的接口
单一职责原则(SRP):一个类应该有且只有一个改变的理由,它要求“一个设计元素只做一件事”。
开闭原则(OCP):不修改原有类就能扩展一个类的行为。也就是说,一个软件实体应当对扩展开放,对修改关闭。
依据设计模式的行为方式,也即其目的,将设计模式分为三种类型:创建型模式、结构型模式、行为型模式
创建型模式:涉及对象的实例化,这类模型的优点不让代码依赖于对象的创建或排列方式,避免用户直接使用new运算符创建对象。如:工厂模式、抽象工厂模式、建造者模式、单件模式、原型模式等。
结构型模式:涉及如何组合类和对象以形成更大的结构,和类有关的结构型模式涉及如何合理地使用继承机制;和对象有关的结构型模式涉及如何合理地使用对象组合机制。如:适配器模式、装饰模式、桥接模式、享元模式、外观模式、代理模式、组合模式。
行为型模式:涉及怎么合理地设计对象之间的交互通信,以及怎样合理地为对象分配职责,让设计富有弹性,易维护,易复用。如:责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、观察者模式、状态模式、策略模式、访问者模式等等。
(具体实现要点)
1、代理:代理类中包含了对象,如果通过代理类判断,就调用对象的方法
2、观察者:观察者创建时都必须包含同一个center,center接收到消息changed变化,遍历观察者,使用它们的方法,changed再变化。
3、装饰:在具体装饰中保存具体组件的引用,在其中添加新功能,可以反复装饰。
4、备忘录:
5、适配器:适配器中包含需要适配的变量和目标接口,以此实现适配。
6、责任链:通过设置处理者的nextHandle,连成链
7、策略:设置多个继承相同父类的策略,父类通过setStrategy(differentStrategy)实现不同策略的调用
1和6是我自己画的,不是UML图
1.代理模式:为其他对象提供一种代理以控制对这个对象都访问
在代理类中创建了一个真实类,如果代理类通过了请求,就调用真实类中的方法
连接链最重要的一环是子类中的handler。