资源描述
三、题目预测 填空题: 1.请从外观、组合、工厂方法、模板方法、观察者、单件、抽象工厂、命令、迭代器、代理、适配器模式中选择7种填入下列的空缺中。P610 1) 工厂方法 模式中,父类负责定义创建对象的公共接口,子类决定要创建的具体类是哪一个。2) 抽象工厂 模式提供一系列相关或相互依赖对象的接口而无需指定它们具体的类。3) 单 件 模式确保某一个类仅有一个实例,并自行实例化并向整个系统提供这个实例。4) 组 合 模式将对象组合成树形结构以表示“部分-整体”的层次结构。使得用户对单个对象和组合对象的使用具有一致性。5) 外 观 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用,为子系统中的一组接口提供一个一致的界面,简化了一群类的接口。6) 观察者 模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新,也就是让对象能在状态改变时被通知。7) 模 板 模MVC模型式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。8) 迭代器模式在对象的集合之中游走,而不暴露集合的实现。9) 代理模式包装对象,以控制对比对象的访问。10) 适配器模式封装对象,并提供不同的接口。2.工厂模式分为(简单工厂),(工厂方法),(抽象工厂)三种类型。3.适配器模式,分为类的适配器和对象的适配器两种实现。其中类的适配器采用的是(继承)关系,而对象适配器采用的是(组合聚合)关系。4.设计模式的基本要素有(名字 ),(意图 ),(问题 ),( 解决方案 ),(参与者与协作者 ),( 实现),(一般性结构)。5.MVC模型的基本工作原理是基于(观察者)模式,实现是基于(命令)模式6.面向对象的六条基本原则包括:开闭原则,里式代换原则,合成聚合原则以及(依赖倒转),(迪米特法则)(接口隔离)。7当我们想用不同的请求对客户进行参数化时,可以使用( 命令 )模式。8当我们想封装不同算法并使它们可相互替换时,可以使用(策略)模式。9. 每一个设计模式都集中于一个特定的(设计问题),描述了(相互通信的对象)或者(类)以及(解决方案)和(解决效果 )。10设计模式中应优先使用(对象组合)而不是(类继承)。11. 面向对象(OO)的基础包括(抽象)(封装)(多态)(继承)。12.(状态模式)允许一个对象基于内部状态而拥有不同的行为。13.模式不是代码,而是(针对设计问题)的通用解决方案。14.观察者模式定义了对象之间(一对多)的关系。15.观察者和可观察者之间用(松耦合方式)结合。16设计模式的两大主题是:(对象组合) 和 (类继承)的讨论。 17.(组合)和(委托)可用于运行时动态地加上新的行为。18.工厂方法使用(继承)把对象的创建委托给子类,子类实现了工厂方法来创建对象。19.抽象工厂方法使用(对象组合)使对象的创建被实现在工厂接口所暴露出来的方法中。20.在Java中实现单件模式,需要私有的(构造器)(一个静态方法)和(一个静态变量)21命令模式将(发出请求)的对象和(执行请求)的对象解耦。22.当需要一个现有的类而其接口不符合需求时,可使用(适配器)模式。23.适配器模式的两种模式是(对象适配器)和(类适配器)。24.(模板方法)定义了算法的步骤,把这些步骤的实现延迟到了子类。25.(代理模式)为另一个对象提供代表,以便控制客户对对象的访问。26.装饰着模式为对象加上(行为)而代理模式则是(控制访问)。27.开闭原则:(扩展开放)(修改关闭)。28.代理模式分为哪4种:(虚拟代理)(远程代理)(安全代理)(聪明引用)。选择题 1设计模式具有的优点。(A)A. 适应需求变化 B.程序易于理解C. 减少开发过程中的代码开发工作量 D.简化软件系统的设计2. 若系统中的某子模块需要为其它模块提供访问不同数据库系统(Oracle、SQL Server、DB2 UDB 等)的功能,这些数据库系统提供的访问接口有一定的差异,但访问过程却都是相同的,例如,先连接数据库,再打开数据库,最后对数据进行查询,( D ) 设计模式可抽象出相同的数据库访问过程;A. 外观 B. 装饰 C. 单件 D. 模板方法3 系统中的文本显示类(TextView)和图片显示类(PictureView)都继承了组件类(Component),分别显示文本和图片内容,现需要构造带有滚动条、或者带有黑色边框、或者既有滚动条又有黑色边框的文本显示控件和图片显示控件,但希望最多只增加三个类,( B )设计模式可以实现该目的。A. 外观 B. 装饰 C.单件 D. 模板方法4. 下面的类图表示的是哪个模式?( A )A、抽象工厂模式(Abstract Factory)B、工厂方法模式(Factory Method)C、命令模式(Command)D、责任链模式(Chain of Responsibility)5. 下面的类图表示的是哪个设计模式?( B )A、代理模式(Proxy) B、装饰模式(Decorator)C、桥接模式(Bridge) D、观察者模式(Observer)6.下面的类图表示的是哪个模式?( B )A、代理模式(Proxy) B、外观模式(Facade)C、适配器模式(Adapter) D、桥接模式(Bridge)7.下面的类图表明了哪个模式?( D )A、责任链模式(Chain of Responsibility) B、命令模式(Command)C、备忘录模式 (Memento) D、工厂方法模式(Factory Method)8. 下面的类图表示的是哪个设计模式?( D )A、模板方法模式(Template Method) B、命令模式 (Command)C、单例模式(Singleton) D、状态模式(State)9. 下面的类图表示的是哪个设计模式?( C )A、模板方法模式(Template Method) B、命令模式 (Command)C、单例模式(Singleton) D、状态模式(State)10.当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用( A)模式。A.创建型 B.结构型 C行为型 D.以上都可以11、设计模式的两大主题是( d )A.系统的维护与开发 B 对象组合与类的继承C.系统架构与系统开发 D.系统复用与系统扩展12、单例模式中,两个基本要点( a b )和单子类自己提供单例 A .构造函数私有 B.唯一实例C.静态工厂方法 D.以上都不对13、下列模式中,属于行为模式的是( b ) A.工厂模式 B观察者 C适配器 以上都是14、对象适配器模式是( a )原则的典型应用。A.合成聚合复用原则 B.里式代换原则C.依赖倒转原则 D.迪米特法则15、静态工厂的核心角色是(a)A.抽象产品 B.具体产品 C.静态工厂 D.消费者16、在观察者模式中,表述错误的是( c )A.观察者角色的更新是被动的。B.被观察者可以通知观察者进行更新C.观察者可以改变被观察者的状态,再由被观察者通知所有观察者依据被观察者的状态进行。D.以上表述全部错误。17、以下关于创建型模式说法正确的是 。 (A)A创建型模式关注的是对象的创建B创建型模式关注的是功能的实现C创建型模式关注的是组织类和对象的常用方法D创建型模式关注的是对象间的协作18.常用的描述设计模式的格式有(ABCD) 。A意图 B动机C适用性 D结构19.以下关于结构型模式说法正确的是 (ACD)。A.结构型模式可以在不破坏类封装性的基础上,实现新的功能。B.结构型模式主要用于创建一组对象。C.结构型模式可以创建一组类的统一访问接口D.结构型模式可以在不破坏类封装性的基础上,使得类可以同不曾估计到的系统进行交互。20.以下属于结构型模式的是(AB)。A.代理(Proxy)模式 B.合成(Composite)模式C.命令(Command)模式 D.观察者(Observer)模式21.在不破坏类封装性的基础上,使得类可以同不曾估计到的系统进行交互。主要体现在(AD)。A.适配器(Adapte)模式 B.合成(Composite)模式C.原型(Prototype)模式 D.桥接(Bridge)模式22.结构型模式中最体现扩展性的几种模式是(BC)。A.适配器(Adapte)模式 B.合成(Composite)模式C.装饰(Decorator)模式 D.桥接(Bridge)模式23.行为类模式使用( B )在类间分派行为。A.接口 B.继承机制C.对象组合 D.委托24.以下属于行为对象模式的是 ( BCD )。A.模板(Template Method)模式 B.迭代器(Iterator)模式C.命令(Command)模式 D.观察者(Observer)模式25.封装分布于多个类之间的行为的模式是( C ) 。A.观察者(Observer)模式 B.迭代器(Iterator)模式C.访问者(Visitor)模式 D.策略(Strategy)模式26.利用继承来提供DUCK的行为,会导致下列那些缺点?(ABCD)A代码在多个子类中重复 B.运行时的行为不容易改变C我们不能让鸭子跳舞D.改变会牵一发而动全身,造成其他鸭子不想要的改变简答题: 1什么是设计模式?设计模式的目标是什么?答: 设计模式通常是对于某一类的软件设计问题的可重用的解决方案,将设计模式引入软件设计和开发过程,其目的就在于要充分利用已有的软件开发经验。2设计模式具有哪三大特点?答: (1) 在特定的场景下有可重用性,对相同类型不同问题的环境,其解决方案都有效。(2) 可传授性,即问题出现的机会很多,解决问题的方案相同,人们相对可以接受。(3) 有表示模式的名称。3GOF 设计模式常用的有几种?GOF 设计模式按照模式的目的可分为哪三类?答: 行为型,结构型,创建型4画出抽象工厂方法类图(这类题自己看书去。)5.针对接口编程,不针对实现编程的意义。答: 主题与观察者都是用接口:观察者利用主题的接口向主题注册,而主题利用观察者接口通知观察者。这样可以让两者之间运作正常,又同时具有松耦合的优点。6.面向对象(OO)的原则有:答: 1. 封装变化 2. 多用组合,少用继承 3. 针对接口编程,不针对实现编程 4. 为交互对象之间的松耦合设计而努力 5. 对扩展开放,对修改关闭 6. 依赖抽象,不要依赖具体类 7. 只和朋友交谈 8. 别找我,我会找你 9. 类应该只有一个改变的理由 7. 耦合分为几种?(1) 内容耦合 (2) 公共耦合 (3) 外部耦合 (4) 控制耦合(5) 标记耦合 (6) 数据耦合 (7) 非直接耦合8.GOF模式分为几种,每种包含哪些模式?答:分为3种。创建型设计模式:简单工厂模式,工厂方法模式,抽象工厂模式,建造者模式,原型模式,单例模式;结构型设计模式:适配器模式,桥接模式,组合模式,装饰模式,外观模式,轻量级模式,代理模式;行为性设计模式:责任链模式,命令模式,解释器模式,迭代器模式,中介者模式,备忘录模式,观察者模式,状态模式,策略者模式,模板方法模式,访问者模式。综合题 1. 某游戏公司现欲开发一款面向儿童的模拟游戏,该游戏主要模拟现实世界中各种鸭子的发声特征、飞行特征和外观特征。游戏需要模拟的鸭子种类及其特征如下表所示:为支持将来能够模拟更多种类鸭子的特征,采用某设计模式设计的类图如下所示:其中,Duck 为抽象类,描述了抽象的鸭子,而类RubberDuck、MallardDuck、CottonDuck 和RedHeadDuck 分别描述具体的鸭子种类,方法fly()、quack()和display()分别表示不同种类的鸭子都具有飞行特征、发声特征和外观特征;类FlyBehavior 与QuackBehavior为抽象类,分别用于表示抽象的飞行行为与发声行为;类FlyNoWay与FlyWithWings分别描述不能飞行的行为和用翅膀飞行的行为;类Quack、Squeak与QuackNoWay分别描述发出“嘎嘎”声的行为、发出橡皮与空气摩擦声的行为与不发声的行为。C+代码#includeusing namespace std ;class FlyBehavior public : virtual void fly() = 0;class QuackBehavior public: virtual void quack() = 0;class FlyWithWings:public FlyBehaviorpublic: void fly() cout 使用翅膀飞行 ! endl; ;class FlyNoWay:public FlyBehaviorpublic: void fly() cout 不能飞行 ! endl; ;class Quack:public QuackBehaviorpublic: void quack() cout 发出嘎嘎声 ! endl;class Squeak:public QuackBehaviorpublic: void quack() cout 发出空气与橡皮摩擦声 ! endl;class QuackNoWay:public QuackBehaviorpublic: void quack () cout 不能发声 ! fly(); void quack() quackBehavior-quack(); ;virtual void display()=0;class RubberDuck: public Duck public:RubberDuck()flyBehavior = new FlyNoWay();quackBehavior = new Squeak();RubberDuck()if(!flyBehavior) delete flyBehavior;if(!quackBehavior) delete quackBehavior;void display() /*此处省略显示橡皮鸭的代码 */ ;/其它代码省略请根据上述类图和代码,阐述采用该设计模式进行设计的优势?18.写一个单例模式的程序:static Instance ist=null;public static Singleton getInstance()if(instance=null)synchoronized(Singleton.class)if(instance=null)instance=new Singleton();return instance;19.写一个观察者模式的程序:public interface AlarmListener/定义观察者接口public void alarm();public void soundTheAlarm()System.out.println(“传感器检测到有人入侵”)class Lighting implements AlarmListenerpublic void alarm()System.out.println(“自动开灯”);class Gates implemetsAlarmListenerpublic void alarm()System.out.println(“ 自动关门”);
展开阅读全文