精华内容
下载资源
问答
  • 第一篇分为8章,介绍了软件体系结构的基础理论,包括软件体系结构的概念及演化、软件建模基础、软件体系结构的形式化、软件体系结构的风格、体系结构的描述语言、软件质量建模、设计模式等内容。第二篇分为4章,首先...
  • 【《软件设计模式与体系结构》学习笔记】软件设计模式的概念软件设计模式是对软件设计经验的总结,是对软件设计中反复出现的设计问题的已被验证的成功解决之道。大量的软件设计模式都是之前从事软件设计开发的前人...

    【《软件设计模式与体系结构》学习笔记】

    软件设计模式的概念


    软件设计模式是对软件设计经验的总结,是对软件设计中反复出现的设计问题的已被验证的成功解决之道。大量的软件设计模式都是之前从事软件设计开发的前人经过大量的实践而摸索出来的,用于帮助后来者快速高效且高质从事软件开发的。

    软件设计模式的要素


    软件设计模式一般会包含四个基本要素:

    • 模式名称:此种设计模式的名字;
    • 问题:是设计者所面临的设计场景,也就是此种设计模式所适用的情况;
    • 解决方案:描述设计细节,通常会采取UML等图示的方式来进行设计模式的详细描述;
    • 效果:描述适用此设计模式的优势与劣势,包括面向软件的质量属性等。

    软件设计模式的分层


    软件设计模式根据问题的规模可以分为三个层次
    架构模式 -> 设计模式 -> 习惯用法

    1. 架构模式:描述系统级的结构组成、相互关系及相关约束,如MVC模式;
    2. 设计模式:针对系统局部设计问题给出的解决方案,一般情况下,设计模式指的就是这一层次的;
    3. 习惯用法:与具体编程语言相关的一种底层模式。

    软件设计模式的分类


    《软件设计模式与体系结构》一书中将设计模式归类如下:

    面向对象分布式计算企业应用软件面向服务的体系结构(SOA)
    创建型模式从混沌到结构领域逻辑模式服务设计模式
    结构型模式分布式基础设施数据源结构模式服务库设计模式
    行为型模式事件分离与分发对象——关系行为模式服务组合设计模式
    接口划分对象——关系结构模式
    组件划分对象——关系元数据映射模式
    应用控制Web表现模式
    并发分布模式
    同步离线并发模式
    对象交互会话状态模式
    适配与扩展基本模式
    模态行为
    资源管理
    数据库访问

    感悟

    在我们日常学习中,有些时候不知不觉的应用到某些设计模式,但我们很难意识到这可以抽象为一种思想方法,并且是可以被他人当为一种模式的设计方法。所以,在以后我们又碰到类似问题时,又会重新将以前的思路再来一次,等到脑中的设计思想快成型的时候,才会恍然大悟,一拍脑门道:“哦,这个东西我好像上一次做过。”

    设计模式是前人经过验证的成功的解决方案,我们应该要善于学习,学会运用,别辜负了前辈们的心血。站在巨人的肩膀上,我们会看得更远。

    展开全文
  • 关于软件体系结构设计模式总结

    千次阅读 2014-05-28 22:27:56
    因为软件体系结构设计模式太多了,如果用的不多,shi

    因为软件体系结构的设计模式太多了,如果用的不多,实践的不多,很难记住原理。当你考软考的时候,当问到这个编程代码用到了什么体系模式,如果思路不清晰或压根不知道那些模式的区别,要做出那道题挺难的,因此我对我觉得比较重要的设计模式做了简短总结:

    1.单例模式:确保一个类仅有一个唯一的实例,并且提供一个全局的访问点。

    2.工厂模式:开闭原则:必须修改工厂类的源代码,所以不支持开闭原则。

    3.生成器模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

    4.适配器模式:类适配器模式:继承关系;对象适配器模式:调用。

    5.组合模式:将对象组合成树形结构,以表示“整体-部分”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。

    6.外观模式:用来隐藏一个软件系统的缩影内部细节,只提供给客户类一个外观类,也叫做接口类。

    7.桥接模式:将抽象部分与它的实现部分分离,使它们可以独立地变化。

    8.迭代器模式:能够提供一种方法按照顺序访问一个聚合对象中的所有元素,而又不需要暴露该对象的内部表示。

    9.访问者模式:指作用于一个对象结构体上的元素的操作。访问者可以使用户在不改变该结构体中的类的基础上定义一个新的操作。

    10.命令模式:解除调用者与接收者类之间的耦合。

    11.中介者模式:将所有对象之间的交互细节抽象到一个独立的类中,这个类叫做中介者类。

    12.策略模式:定义了一系列的算法,将每一个算法封装起来,并且使它们之间可以相互替换。策略模式让算法的变化不会影响到使用算法的客户。

    13.状态模式:允许一个对象在其内部状态改变时改变它的行为。这个对象看起来修改了它的类。

    展开全文
  • 设计模式软件体系结构见面课及答案 见面课创建型设计模式总结 1工厂设计模式可以分为简单工厂方法工厂方法模式和抽象工厂模式 A.对 B.错 正确答案对 2创建型软件设计模式分为简单工厂方法模式工厂方法模式抽象工厂...
  • 软件体系结构与设计模式笔记

    千次阅读 2012-12-26 22:35:35
    软件体系结构与设计模式笔记 第1章软件体系结构概述 ü SEI软件体系结构讨论群定义如下:一个程序/系统构件的结构,它们之间的相互关系,以及在设计和交付的整个过程中的原则和指导方针。 ü Mary Shaw和David ...

    软件体系结构与设计模式笔记

    第1章软件体系结构概述

    ü  SEI软件体系结构讨论群定义如下:一个程序/系统构件的结构,它们之间的相互关系,以及在设计和交付的整个过程中的原则和指导方针。

    ü  Mary Shaw和David Garlan认为软件体系结构包括构成系统的设计元素的描述,设计元素的交互,设计元素组合的模式,以及在这些模式中的约束。

    ü  软件体系结构包括构件(Component)、连接件(Connector)和约束(Constrain)或配置(Configuration)三大要素。

    ü  国内普遍接受的定义:软件体系结构包括构件、连接件和约束,它是可预制和可重构的软件框架结构。

    ü 构件是可预制和可重用的软件部件,是组成体系结构的基本计算单元或数据存储单元

    ü 连接件也是可预制和可重用的软件部件,是构件之间的连接单元

    ü 构件和连接件之间的关系用约束来描述

    ü  软件体系结构 = 构件 + 连接件 + 约束

    软件体系结构的优势容易理解、重用、控制成本、可分析性

    第2章软件体系结构风格

    w  软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。

    w  体系结构风格定义了一个系统家族,即一个体系结构定义一个词汇表和一组约束。词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。

    w  体系结构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。

    w  数据流风格: 批处理序列; 管道/过滤器。

    w  调用/返回风格:主程序/子程序;面向对象风格;层次结构。

    w  独立构件风格:进程通讯;事件系统。

    w  虚拟机风格:解释器;基于规则的系统。

    w  仓库风格:数据库系统;超文本系统;黑板系统。

    w  过程控制环路

    C/S风格体系结构有三个主要组成部分:数据库服务器、客户应用程序和网络。

    B/S风格浏览器/Web服务器/数据库服务器。

    优点:C/S体系结构具有强大的数据操作和事务处理能力,模型思想简单,易于人们理解和接受。将大的应用处理任务分布到许多通过网络连接的低成本计算机上,以节约大量费用。

    缺点:开发成本较高、客户端程序设计复杂、信息内容和形式单一、用户界面风格不一,使用繁杂不利于推广使用、软件移植困难、软件维护和升级困难、新技术不能轻易应用

    优点:基于B/S体系结构的软件,系统安装、修改和维护全在服务器端解决。

    缺点:B/S体系结构缺乏对动态页面的支持能力,没有集成有效的数据库处理功能。

    B/S体系结构的系统扩展能力差,安全性难以控制。

    采用B/S体系结构的应用系统,在数据查询等响应速度上,要远远低于C/S体系结构。

    B/S体系结构的数据提交一般以页面为单位,数据的动态交互性不强,不利于在线事务处理(OLTP)应用。

    第3章软件需求与架构

    w  需求的基本概念

    ü  IEEE (1997)

    Ø (1)  用户解决问题或达到目标所需的条件或能力

    Ø (2)  系统或系统部件要满足合同、标准、规范或其他正式规定文档所需具有的条件或能力

    Ø (3)  一种反映上面(1)或(2)所描述的条件或能力的文档说明

    w  业务需求

    ü  反映组织机构或客户对系统、产品高层次的目标要求,通常问题定义本身就是业务需求

    w  用户需求

    ü  描述用户使用产品必须要完成什么任务,怎么完成的需求,通常是在问题定义的基础上进用户访谈、调查,对用户使用的场景进行整理,从而建立从用户角度的需求。

    w  系统需求

    ü  从系统的角度来说明软件的需求,包括用特性说明的功能需求、质量属性,以及其他非功能需求,还有设计约束等。

    w  非功能需求

    ü  指产品必须具备的属性或品质,如正确性、可靠性、性能、容错性和可扩展性等。

    w  功能需求

    ü  需求的主体,需求的本质

    ü  功能需求定义:系统必须完成的那些事,即为了向它的用户提供有用的功能,产品必须执行的动作

    w  设计约束

    获取需求的方法

    ü  面谈(访谈)

    ü  问卷调查

    ü  会议(需求讨论会、重点问题讨论会、业务专题讨论会、设计专题讨论会)

    ü  文档研究

    ü  任务示范(观察)

    ü  用例与角色扮演

    ü  原型设计(小规模试验)研究类似公司

    需求的层次化

    ü  业务级需求:包含客户或出资者要达到的业务目标、预期投资、工期要求,以及要符合哪些标准、对哪些遗留系统进行整合等约束条件。

    ü  用户级需求:用户使用系统来辅助完成哪些工作?对质量有何要求?用户群及所处的使用环境方面有何特殊要求?

    ü  开发级需求:开发人员需要实现什么?开发期间、维护期间有何质量考虑?开发团队的哪些情况会反过来影响架构?

    需求分类

    ü  功能需求:更多体现各级直接目标要求

    ü  质量属性:运行期质量 + 开发期质量

    ü  约束需求:业务环境因素 +使用环境因素 + 构建环境因素+ 技术环境因素

    ü  功能模型——如UC

    ü  业务流程模型——如DFD

    ü  数据建模模型——如ER

    w  用例建模(Use CaseModeling)是使用用例的方法来描述系统的功能需求的过程,用例建模促进并鼓励了用户参与,这是确保项目成功的关键因素之一。

    粒度原则:

           用例要有路径,路径要有步骤。而这一切都是“可观测”的。

    ü  需求跟踪的目的是建立与维护“需求-设计-编程-测试”之间的一致性,确保所有的工作成果符合用户需求。

    w  外部质量对于用户而言是可见的包括正确性、健壮性、可靠性、性能、安全性、易用性、兼容性等。

    w  内部质量只有开发人员关心它们可以帮助开发人员实现外部质量包括易理解性、可测试性、可维护性、可扩展性、可移植性、可复用性等

    ü  依赖注入

    w 构造注入(Constructor Injection):通过构造函数注入实例变量。

    w 设值注入(Setter Injection):通过Setter方法注入实例变量。

    w 接口注入(Interface Injection):通过接口方法注入实例变量。

    1.        用例文档

    用例编号

    用例名

    执行者

    前置条件

    后置条件

    涉众利益

    基本路径      

    ü  1…..××××

    ü  2……××××

    ü  3…..××××

    2.        需求规格说明书

     

    第1章_统一建模语言基础知识

    a)        视图(View)

                            i.             用户视图:以用户的观点表示系统的目标,它是所有视图的核心,该视图描述系统的需求。

                          ii.             结构视图:表示系统的静态行为,描述系统的静态元素,如包、类与对象,以及它们之间的关系。

                         iii.             行为视图:表示系统的动态行为,描述系统的组成元素如对象在系统运行时的交互关系。

                         iv.             实现视图:表示系统中逻辑元素的分布,描述系统中物理文件以及它们之间的关系。

                          v.             环境视图:表示系统中物理元素的分布,描述系统中硬件设备以及它们之间的关系。

    用例图(Use Case Diagram): 又称为用况图,对应于用户视图。在用例图中,使用用例来表示系统的功能需求,用例图用于表示多个外部执行者与系统用例之间以及用例与用例之间的关系。用例图与用例说明文档(Use Case Specification)是常用的需求建模工具,也称之为用例建模。

    类图(Class Diagram):对应于结构视图。类图使用类来描述系统的静态结构,类图包含类和它们之间的关系,它描述系统内所声明的类,但它没有描述系统运行时类的行为。

    w  类之间的关系

    ü  关联关系

    •      关联关系(Association)是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系。

    •      双向关联

    •      单向关联

    •      自关联

    •      重数性关联

    ü  聚合关系

    •      聚合关系(Aggregation)表示一个整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构,从而找出一些成员类,该整体类和成员类之间就形成了聚合关系。

    ü  组合关系

    •      组合关系(Composition)也表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在,部分对象与整体对象之间具有同生共死的关系。

    ü  依赖关系

    •      依赖关系(Dependency)是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。

    ü  泛化关系

    •      泛化关系(Generalization)也就是继承关系,也称为“is-a-kind-of”关系,泛化关系用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派生类。在UML中,泛化关系用带空心三角形的直线来表示。

    ü  接口与实现关系

    •      接口之间也可以有与类之间关系类似的继承关系和依赖关系,但是接口和类之间还存在一种实现关系(Realization),在这种关系中,类实现了接口,类中的操作实现了接口中所声明的操作。在UML中,类与接口之间的实现关系用带空心三角形的虚线来表示。

    w  顺序图定义

    ü  顺序图(SequenceDiagram)是一种强调对象间消息传递次序的交互图,又称为时序图或序列图。

    w  状态图定义

    ü  状态图(StatechartDiagram)用来描述一个特定对象的所有可能状态及其引起状态转移的事件。

     

    第2章_面向对象设计原则

    w  单一职责原则要求在软件系统中,一个类只负责一个功能领域中的相应职责。

    w  开闭原则要求一个软件实体应当对扩展开放,对修改关闭,即在不修改源代码的基础上扩展一个系统的行为。

    w  里氏代换原则可以通俗表述为在软件中如果能够使用基类对象,那么一定能够使用其子类对象。

    w  依赖倒转原则要求抽象不应该依赖于细节,细节应该依赖于抽象;要针对接口编程,不要针对实现编程。

    w  接口隔离原则要求客户端不应该依赖那些它不需要的接口,即将一些大的接口细化成一些小的接口供客户端使用。

    w  合成复用原则要求复用时尽量使用对象组合,而不使用继承。

    w  迪米特法则要求一个软件实体应当尽可能少的与其他实体发生相互作用。

    第3章_设计模式概述

    w  设计模式的定义

    ü  设计模式(DesignPattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

    ü  设计模式一般有如下几个基本要素:模式名称、问题、目的、解决方案、效果、实例代码和相关设计模式,其中的关键元素包括以下四个方面:

    w 模式名称(Pattern name)

    w 问题(Problem)

    w 解决方案(Solution)

    w 效果(Consequences)

     

    范围\目的

    创建型模式

    结构型模式

    行为型模式

    类模式

    工厂方法模式

    (类)适配器模式

    解释器模式

    模板方法模式

    对象模式

    抽象工厂模式

    建造者模式

    原型模式

    单例模式

    (对象)适配器模式

    桥接模式

    组合模式

    装饰模式

    外观模式

    享元模式

    代理模式

    职责链模式

    命令模式

    迭代器模式

    中介者模式

    备忘录模式

    观察者模式

    状态模式

    策略模式

    访问者模式

     

     

    第4章_简单工厂模式

    ü  简单工厂模式(SimpleFactory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

    ü  重构后的代码:

    public abstract class AbstractPay

    {

      public abstract void pay();

    }

    public class CashPay extends AbstractPay

    {

       public void pay()

        {

           //现金支付处理代码

        }

    }

    public class PayMethodFactory

    {

       public static AbstractPay getPayMethod(String type)

        {

           if(type.equalsIgnoreCase("cash"))

           {

               return new CashPay();       //根据参数创建具体产品

            }

            elseif(type.equalsIgnoreCase("creditcard"))

           {

               return new CreditcardPay();   //根据参数创建具体产品

           }

           ……

        }

    }

    ü  简单工厂模式最大的缺点是当有新产品要加入到系统中时,必须修改工厂类,加入必要的处理逻辑,这违背了“开闭原则”。

    ü  简单工厂模式最大的优点在于实现对象的创建和对象的使用分离,将对象的创建交给专门的工厂类负责,但是其最大的缺点在于工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,而且产品较多时,工厂方法代码将会非常复杂。

    ü  简单工厂模式适用情况包括:工厂类负责创建的对象比较少;客户端只知道传入工厂类的参数,对于如何创建对象不关心。

     

    第5章_工厂方法模式

    ü  工厂方法模式(FactoryMethod Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(PolymorphicFactory)模式,它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

    ü  抽象工厂类代码:

    public abstract class PayMethodFactory

    {

       public abstract AbstractPay getPayMethod();

    }

    ü  具体工厂类代码:

    public class CashPayFactory extendsPayMethodFactory

    {

       public AbstractPay getPayMethod()

        {

           return new CashPay();

        }

    }

    ü  客户类代码片段:

    PayMethodFactory factory;

    AbstractPay payMethod;

    factory=new CashPayFactory();

    payMethod =factory.getPayMethod();

    payMethod.pay();

    ü  工厂方法模式的主要优点是增加新的产品类时无须修改现有系统,并封装了产品对象的创建细节,系统具有良好的灵活性和可扩展性;其缺点在于增加新产品的同时需要增加新的工厂,导致系统类的个数成对增加,在一定程度上增加了系统的复杂性。符合开闭原则。

    ü  工厂方法模式适用情况包括:一个类不知道它所需要的对象的类;一个类通过其子类来指定创建哪个对象;将创建对象的任务委托给多个工厂子类中的某一个,客户端在使用时可以无须关心是哪一个工厂子类创建产品子类,需要时再动态指定。

     

    第6章_抽象工厂模式

    ü  抽象工厂模式(AbstractFactory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。

    ü  具体工厂类的典型代码如下:

    public class ConcreteFactory1 extendsAbstractFactory

    {

       public AbstractProductA createProductA()

        {

           return new ConcreteProductA1();

        }

       public AbstractProductB createProductB()

        {

           return new ConcreteProductB1();

        }

    }

    ü  抽象工厂模式的主要优点是隔离了具体类的生成,使得客户并不需要知道什么被创建,而且每次可以通过具体工厂类创建一个产品族中的多个对象,增加或者替换产品族比较方便,增加新的具体工厂和产品族很方便;主要缺点在于增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性。

    ü  抽象工厂模式适用情况包括:一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节;系统中有多于一个的产品族,而每次只使用其中某一产品族;属于同一个产品族的产品将在一起使用;系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体实现。

     

    第9章_单例模式

    ü  单例模式(SingletonPattern):单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。

    ü  单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。单例模式是一种对象创建型模式。单例模式又名单件模式或单态模式。

     

    ü  单例模式的实现代码如下所示:

    public class Singleton

    {

             privatestatic Singleton instance=null;  //静态私有成员变量

             //私有构造函数

             privateSingleton()

             {       

             }

            

          //静态公有工厂方法,返回唯一实例

             publicstatic Singleton getInstance()

             {

                       if(instance==null)

                           instance=new Singleton();      

                       returninstance;

             }

    }

    ü  单例模式的主要优点在于提供了对唯一实例的受控访问并可以节约系统资源;其主要缺点在于因为缺少抽象层而难以扩展,且单例类职责过重。

    ü  单例模式适用情况包括:系统只需要一个实例对象;客户调用类的单个实例只允许使用一个公共访问点。

    ü  饿汉式单例与懒汉式单例类比较

    ü 饿汉式单例类在自己被加载时就将自己实例化。单从资源利用效率角度来讲,这个比懒汉式单例类稍差些。从速度和反应时间角度来讲,则比懒汉式单例类稍好些。

    ü 懒汉式单例类在实例化时,必须处理好在多个线程同时首次引用此类时的访问限制问题,特别是当单例类作为资源控制器,在实例化时必然涉及资源初始化,而资源初始化很有可能耗费大量时间,这意味着出现多线程同时首次引用此类的机率变得较大,需要通过同步化机制进行控制。

     

     

    第10章_适配器模式

    ü  适配器模式(AdapterPattern) :将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。

    ü  典型的类适配器代码:

    public class Adapter extendsAdaptee implements Target

    {

             publicvoid request()

             {

                       specificRequest();

             }

    }

    ü  典型的对象适配器代码:

    public class Adapter extends Target

    {

             privateAdaptee adaptee;

            

             publicAdapter(Adaptee adaptee)

             {

                       this.adaptee=adaptee;

             }

            

             publicvoid request()

             {

                       adaptee.specificRequest();

             }

    }

    类适配器

    对象适配器

    ü  适配器模式的主要优点是将目标类和适配者类解耦,增加了类的透明性和复用性,同时系统的灵活性和扩展性都非常好,更换适配器或者增加新的适配器都非常方便,符合“开闭原则”;类适配器模式的缺点是适配器类在很多编程语言中不能同时适配多个适配者类,对象适配器模式的缺点是很难置换适配者类的方法。

    ü  适配器模式适用情况包括:系统需要使用现有的类,而这些类的接口不符合系统的需要;想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类一起工作。

     

    第14章_外观模式

    ü  外观模式(FacadePattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。

    外观模式也是“迪米特法则”

    ü  典型的外观角色代码:

    public class Facade

    {

        private SubSystemA obj1 =new SubSystemA();

        private SubSystemB obj2 =new SubSystemB();

        private SubSystemC obj3 =new SubSystemC();

        public void method()

        {

            obj1.method();

            obj2.method();

            obj3.method();

        }

    }

    w  外观模式主要优点在于对客户屏蔽子系统组件,减少了客户处理的对象数目并使得子系统使用起来更加容易,它实现了子系统与客户之间的松耦合关系,并降低了大型软件系统中的编译依赖性,简化了系统在不同平台之间的移植过程;其缺点在于不能很好地限制客户使用子系统类,而且在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”。

    w  外观模式适用情况包括:要为一个复杂子系统提供一个简单接口;客户程序与多个子系统之间存在很大的依赖性;在层次化结构中,需要定义系统中每一层的入口,使得层与层之间不直接产生联系。

     

    第16章_代理模式

    ü  代理模式(ProxyPattern) :给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理模式的英文叫做Proxy或Surrogate,它是一种对象结构型模式。

     

    ü  典型的代理类实现代码:

    public class Proxy implements Subject

    {

        private RealSubjectrealSubject = new RealSubject();

        public void preRequest()

        {…...}

        public void request()

        {

            preRequest();

            realSubject.request();

            postRequest();

        }

        public void postRequest()

        {……}

    }

    ü  代理模式的优点在于能够协调调用者和被调用者,在一定程度上降低了系统的耦合度;其缺点在于由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢,并且实现代理模式需要额外的工作,有些代理模式的实现非常复杂。

    ü  模式适用环境

    ü  根据代理模式的使用目的,代理模式有以下几种类型(续):

    ü 保护(Protect or Access)代理:控制对一个对象的访问,可以给不同的用户提供不同级别的使用权限。

    ü 缓冲(Cache)代理:为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。

    ü 防火墙(Firewall)代理:保护目标不让恶意用户接近。

    ü 同步化(Synchronization)代理:使几个用户能够同时使用一个对象而没有冲突。

    ü 智能引用(Smart Reference)代理:当一个对象被引用时,提供一些额外的操作,如将此对象被调用的次数记录下来等。

     

    第23章_观察者模式

    ü  观察者模式(ObserverPattern):定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。观察者模式是一种对象行为型模式。

     

    ü  典型的抽象目标类代码如下所示:

    import java.util.*;

    public abstract class Subject

    {

        protectedArrayList observers = new ArrayList();

             publicabstract void attach(Observer observer);

             publicabstract void detach(Observer observer);

             publicabstract void notify();

    }

    ü  典型的具体目标类代码如下所示:

    public class ConcreteSubject extendsSubject

    {

             publicvoid attach(Observer observer)

             {

                       observers.add(observer);

             }

            

             publicvoid detach(Observer observer)

             {

                       observers.remove(observer);

             }

            

             publicvoid notify()

             {

                       for(Objectobs:observers)

                       {

                                ((Observer)obs).update();

                       }

             }       

    }

    ü  典型的抽象观察者代码如下所示:

    public interface Observer

    {

             publicvoid update();

    }

    ü  典型的具体观察者代码如下所示:

    public class ConcreteObserver implementsObserver

    {

             publicvoid update()

             {

                       //具体更新代码

             }

    }

    ü  客户端代码片段如下所示:

    Subject subject = new ConcreteSubject();

    Observer observer = new ConcreteObserver();

    subject.attach(observer);

    subject.notify();

    w  观察者模式的主要优点在于可以实现表示层和数据逻辑层的分离,并在观察目标和观察者之间建立一个抽象的耦合,支持广播通信;其主要缺点在于如果一个观察目标对象有很多直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间,而且如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。

    w  观察者模式适用情况包括:一个抽象模型有两个方面,其中一个方面依赖于另一个方面;一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变;一个对象必须通知其他对象,而并不知道这些对象是谁;需要在系统中创建一个触发链。

     

     

    ü  组合模式(CompositePattern):组合多个对象形成树形结构以表示“整体-部分”的结构层次。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性。

    ü  Composite Pattern: Compose objects into tree structures to representpart-whole hierarchies. Composite lets clients treat individual objects andcompositions of objects uniformly.

    ü  组合模式的主要优点在于可以方便地对层次结构进行控制,客户端调用简单,客户端可以一致的使用组合结构或其中单个对象,用户就不必关心自己处理的是单个对象还是整个组合结构,简化了客户端代码;其缺点在于使设计变得更加抽象,且增加新构件时可能会产生一些问题,而且很难对容器中的构件类型进行限制。

    ü  组合模式适用情况包括:需要表示一个对象整体或部分层次;让客户能够忽略不同对象层次的变化,客户端可以针对抽象构件编程,无须关心对象层次结构的细节;对象的结构是动态的并且复杂程度不一样,但客户需要一致地处理它们。

    ü  命令模式(CommandPattern):将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。

    ü  Command Pattern: Encapsulate a request as an object, thereby lettingyou parameterize clients with different requests, queue or log requests, andsupport undoable operations.

    ü  命令模式的主要优点在于降低系统的耦合度,增加新的命令很方便,而且可以比较容易地设计一个命令队列和宏命令,并方便地实现对请求的撤销和恢复;其主要缺点在于可能会导致某些系统有过多的具体命令类。

    ü  命令模式适用情况包括:需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互;需要在不同的时间指定请求、将请求排队和执行请求;需要支持命令的撤销操作和恢复操作;需要将一组操作组合在一起,即支持宏命令。

     

    ü  迭代器模式(IteratorPattern) :提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。

    ü  Iterator Pattern: Provide a way to access the elements of an aggregateobject sequentially without exposing its underlying representation.

    ü  迭代器模式的主要优点在于它支持以不同的方式遍历一个聚合对象,还简化了聚合类,而且在同一个聚合上可以有多个遍历;其缺点在于增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。

    ü  迭代器模式适用情况包括:访问一个聚合对象的内容而无须暴露它的内部表示;需要为聚合对象提供多种遍历方式;为遍历不同的聚合结构提供一个统一的接口。

     

    ü  模板方法模式(TemplateMethod Pattern):定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法是一种类行为型模式。

    ü  Template Method Pattern: Define the skeleton of an algorithm in anoperation, deferring some steps to subclasses. Template Method lets subclassesredefine certain steps of an algorithm without changing the algorithm'sstructure.

    ü  模板方法模式的优点在于在子类定义详细的处理算法时不会改变算法的结构,实现了代码的复用,通过对子类的扩展可以增加新的行为,符合“开闭原则”;其缺点在于需要为每个不同的实现都定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象

    ü  模板方法模式适用情况包括:一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现;各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复;对一些复杂的算法进行分割,将其算法中固定不变的部分设计为模板方法,而一些可以改变的细节由其子类来实现;通过模板方法模式还可以控制子类的扩展。

    ü  桥接模式(BridgePattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。

    ü  Bridge Pattern: Decouple an abstraction from its implementation sothat the two can vary independently.

    ü  桥接模式的主要优点是分离抽象接口及其实现部分,是比多继承方案更好的解决方法,桥接模式还提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统,实现细节对客户透明,可以对用户隐藏实现细节;其主要缺点是增加系统的理解与设计难度,且识别出系统中两个独立变化的维度并不是一件容易的事情。

    ü  桥接模式适用情况包括:需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系;抽象化角色和实现化角色可以以继承的方式独立扩展而互不影响;一个类存在两个独立变化的维度,且这两个维度都需要进行扩展;设计要求需要独立管理抽象化角色和具体化角色;不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统。

     

    展开全文
  • 设计模式与软件体系结构【期末全整理答案】

    万次阅读 多人点赞 2020-07-13 19:01:19
    若本文对你有帮助,请点赞、关注我呦! 期末试题基本出自这些题,请提前复制黏贴到word文档里,方便考试时直接查找。 单选题汇总 ...2、常用的基本设计模式可分为(A)。 A.创建型、结构型和行为型 ...

    题海茫茫,答案难觅。点赞关注我呦!

    期末试题基本出自这些题,请提前复制黏贴到word文档里,方便考试时直接查找,最好考前先浏览一遍。

    考试考到但不知道标准答案的题:(如果有会的,麻烦在评论区写出答案,谢谢)

    1、代理模式的扩展是()

    2、简述状态模式的应用场景和扩展方向。

    3、命令模式可以扩展为什么模式?画出其结构图

    手速要快快快快快快快快快快快快快快快快快快快快,遇到不会的先跳过

    单选题汇总

    第一章 软件设计模式体系结构概述

    1、以下对开闭原则的描述错误的是(A)。

    A.开闭原则与“对可变形的封装原则”没有相似性  

    B.找到一个系统的可变元素,将它封装起来,叫开闭原则  

    C.对修改关闭,是其原则之一  

    D.从抽象层导出一个或多个新的具体类可以改变系统的行为,是其原则之一  

     

    2、常用的基本设计模式可分为(A)。

    A.创建型、结构型和行为型        B.对象型、结构型和行为型  

    C.过程型、结构型和行为型        D.抽象型、接口型和实现型  

     

    3、对违反里氏替换原则的两个类,可以采用的候选解决方案正确的是(D)。

    A.创建一个新的抽象类C,作为两个具体类的超类,将A和B共同的行为移动到C中,从而解决A和B行为不完全一致的问题。

    B.将B到A的继承关系改成组合关系。

    C.区分是“is-a”还是“has-a”。如果是“is-a”,可以使用继承关系,如果是“has-a”应该改成组合关系。

    D.尽量将一些需要扩展的类或者存在变化的类设计为抽象类或者接口,并将其作为基类,在程序中尽量使用基类对象进行编程。

     

    4、下列属于面向对象基本原则的是(C)。

    A.继承        B.封装        C.里氏替换        D.子类复用

     

    5、要依赖于抽象,不要依赖于具体,即针对接口编程,不要针对实现编程,是(D)的表述。

    A.开-闭原则        B.接口隔离原则        C.里氏代换原则        D.依赖倒转原则

     

    6、“不要和陌生人说话”是(D)原则的通俗表述。

    A.接口隔离        B.里氏代换        C.依赖倒转        D.迪米特

     

    7、Open-Close原则的含义是一个软件实体(A)

    A.应当对扩展开放,对修改关闭        B.应当对修改开放,对扩展关闭

    C.应当对继承开放,对修改关闭        D.以上都不对

    第二章 创建型_简单工厂、工厂方法、抽象工厂

    8、以下关于创建型模式说法正确的是(A)。

    A:创建型模式关注的是对象的创建        B:创建型模式关注的是功能的实现

    C:创建型模式关注的是组织类和对象的常用方法        D:创建型模式关注的是对象间的协作  

     

    9、当创建一个具体的对象而不希望制定具体的类时,可以使用(B)模式。

    A:结构型        B:创建型        C:行为型        D:复用型

     

    10、当需要在项目中定制自己的元素时,可使用(B)模式来定制。

    A:结构型        B:创建型        C:行为型        D:复用型

     

    11、下列关于静态工厂和工厂方法表述错误的是(D)

    A.在工厂方法模式中,对于存在继承等级结构的产品树,产品的创建是通过相应等级结构的工厂创建的

    B.不能形成静态工厂的继承结构

    C.静态工厂对具体产品的创建类别和创建时机的判断是混和在一起的,这点在工厂方法中

    D.二者都满足开闭原则:静态工厂以if else方式创建对象,增加需求的时候会修改源代码

     

    12、关于模式适用性,在以下情况不适合使用FACTORY METHOD模式?(C)

    A. 当一个类不知道它所必须创建的对象的类的时候

    B. 当一个类希望由它的子类来指定它所创建的对象的时候

    C. 当你提供一个产品类库,而只想显示它们的接口而不是实现时

    D. 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候

     

    13、以下意图哪个是用来描述FACTORY METHOD(工厂方法)?()

    A. 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类

    B. 表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作

    C. 定义一个用于创建对象的接口,让子类决定实例化哪一个类。该模式使一个类的实例化延迟到其子类

    D. 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化

     

    14、以下意图哪个是用来描述ABSTRACT FACTORY(抽象工厂)?(A)

    A. 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类

    B. 定义一个用于创建对象的接口,让子类决定实例化哪一个类

    C. 将一个类的接口转换成客户希望的另外一个接口

    D. 表示一个作用于某对象结构中的各元素的操作

     

    第三章 创建型_单/多例、建造者、原型

    15、(D)可用来描述原型(Prototype)。

    A:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。

    B:表示一个作用于某对象结构中的各元素的操作。它是你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

    C:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

    D:用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。

     

    16、在(C)适合使用单例(Singleton)模式。

    A:当一个类不知道它所必须创建的对象的类的时候  

    B:当一个类的实例只能有几个不同的状态组合中的一种时  

    C:当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时  

    D:当一个类希望由它的子类来指定它所创建的对象的时候

     

    17、在(B)不适合使用原型(Prototype)模式。

    A:当要实例化的类是在运行时刻指定是,例如通过动态装载  

    B:当要强调一系列相关的产品对象的设计以便进行联合使用时  

    C:为了避免创建一个与产品类层次平行的工厂类层次时                     

    D:当一个类的实例只能有几个不同状态组合中的一种时

     

    18、以下意图哪个是用来描述SINGLETON(单例)?(B)

    A. 将一个类的接口转换成客户希望的另外一个接口该模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作

    B. 保证一个类仅有一个实例,并提供一个访问它的全局访问点

    C. 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化

    D. 用一个中介对象来封装一系列的对象交互

     

    19、以下意图哪个是用来描述BUILDER(生成器)?(B)

    A. 定义一个用于创建对象的接口,让子类决定实例化哪一个类

    B. 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

    C. 保证一个类仅有一个实例,并提供一个访问它的全局访问点

    D. 运用共享技术有效地支持大量细粒度的对象

    第四章 结构型_适配器

    20、用来描述适配器( Adapter)的意图是(A)。

    A:将一个类的接口转换成客户希望的另外一个接口,本模式使原本由于接口不兼容而不能一起工作的那些类可以一起工作

    B:定义一个用于创建对象的接口,让子类决定实例化哪一个类

    C:表示一个作用于某对象结构中的各元素的操作,它使用户可以在不改变各元素的类的前提下定义作用于这些元素的新操作

    D:将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作

     

    21、关于模式适用性,不适合使用适配器( Adapter )模式的是(D)。

    A:用户想使用一个已经存在的类,而它的接口不符合用户的需求

    B:用户想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作

    C:用户想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口

    D:如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象

    第五章 结构型_合成、装饰模式

    22、以下哪一项可用来描述装饰(Decorator)(D)。

    A:运用共享技术有效地支持大量细粒度的对象

    B:用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象

    C:将抽象部分与它的实现部分分离,使它们都可以独立变化

    D:动态地给一个对象添加一些额外的职责

     

    23、装饰(Decorator)模式不能用于下列那个选项(C)。 

    A:在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责

    B:处理那些可以撒销的职责

    C:客户程序与抽象类的实现部分之间存在着很大的依赖性

    D:当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,每种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是类的定义被隐藏,或类定义不能用于生成子类

     

    24、关于模式适用性,以下(B)不适合使用 Composite(组合)模式。

    A:用户想使用一个已经存在的类,而它的接口不符合用户的需求

    B:用户想表示对象的部分-整体层次结构

    C:当一个类的实例只能有几个不同状态组合中的一种时

    D:一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为

     

    25、以下意图(C)是用来描述组合(Composite )。

    A:为其他对象提供一种代理以控制对这个对象的访问

    B:运用共享技术有效地支持大量细粒度的对象

    C:将对象组合成树形结构以表示“部分-整体”的层次结构

    D:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

    第六章 结构型_代理、享元模式

    26、关于模式适用性,以下情况不适合使用代理(Proxy)模式的是(A)。

    A:用户想使用一个已经存在的类,而它的接口不符合用户的需求

    B:根据需要创建开销很大的对象

    C:在需要用比较通用和复杂的对象指针代替简单的指针的时候

    D:取代了简单的指针,它在访向对象时执行一些附加操作 

     

    27、以下意图用来描述代理(Proxy)的是(C)。

    A:用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象

    B:运用共享技术有效地支持大量细粒度的对象

    C:为其他对象提供一种代理以控制对这个对象的访问

    D:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

     

    28、代理模式的扩展是(A)。

    A:动态代理模式         B:静态代理模式         C:多态代理模式         D:单态代理模式

     

    29、如果有一个2MB的文本(英文字母),为了对其中的字母进行分类和计数,若为文本中的每个字母都定义一个对象显然不合实际,对与该问题最好可使用的模式是(B)。

    A:装饰(Decorator) 模式         B:享元(Flyweight) 模式         C:合成(Composite)模式         D:命令(Command)模式

     

    30、关于模式活用性,以下(D)不适合使用Flyweight(享元)模式。

    A:一个应用程序使用了大量的对象         B:完全由于使用大量的对象,造成很大的存储开销

    C:对象的大多数状态都可变为外部状态         D:用户想使用一个已经存在的类,而它的接口不符合用户的需求

     

    31、以下意图哪个是用来描述FLYWEIGHT(享元)?(B)

    A.将抽象部分与它的实现部分分离,使它们都可以独立地变化。

    B.运用共享技术有效地支持大量细粒度的对象。

    C.动态地给一个对象添加一些额外的职责。

    D.用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象

    第七章 结构型_外观、桥梁、过滤模式

    32、桥接(Bridge)模式不能用在下列哪个场合(D)。

    A:类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充,这时Bridge模式使用户可以对不同的抽象接口和实现部分进行组合,井分别对它们进行扩充

    B:用户不希望在抽像和它的实现部分之间有一个固定的绑定关系,例如,这种情况可能是因为在程序运行时刻实现部分应可以被选择或者切换

    C:对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译

    D:客户程序与抽象类的实现部分之间存在着很大的依赖性

     

    33、以下用来描述桥接( Bridge )的意图是(B)。

    A:提供一个创建一系列相关或相互依赖对象的接口,面无须指定它们具体的类

    B:将抽象部分与它的实现部分分离,使它们都可以独立变化

    C:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

    D:动态地给一个对象添加一些额外的职责

     

    34、以下可用来描述外观(Facade)的是(A)。

    A:为子系统中的一组接口提供一个一致的界面,本模式定义了一个高层接口,这个接口使得这一子系统更加容易使用

    B:定义一个用于创建对象的接口,让子类决定实例化哪一个类

    C:保证一个类仅有一个实例,并提供一个访问它的全局访问点

    D:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态

    第八章 行为型_责任链、命令、解释器模式

    35、关于模式适用性,(B)不适合使用职责链(Chain of Responsibility)模式。

    A:有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定

    B:在需要用比较通用和复杂的对象指针代替简单的指针的时候

    C:用户想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求

    D:可以处理一个请求的对象集合应被动态指定 

     

    36、Java的异常处理机制可理解为(C)行为模式。

    A:观察者(Observer)模式         B:迭代器(Iterator)模式

    C:职责链(Chain of Responsibility)模式         D:策略(Strategy)模式

     

    37、以下意图那个是用来描述COMMAND(命令)?(A)

    A.将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。

    B.定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换,本模式使得算法可独立于使用它的客户而变化。

    C.为其他对象提供一种代理以控制对这个对象的访问。

    D.保证一个类仅有一个实例,并提供一个访问它的全局访问点。

     

    38、以下意图(B)可用来描述解释器(Interpreter)。

    A:将抽象部分与它的现实部分分离,使它们都可以独立变化

    B:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子

    C:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不用的表示

    D:为其它对象提供一种代理以控制对这个对象的访问

    第九章 行为型_迭代器、备忘录、观察者模式

    39、以下选项可用来描述观察者(Observer)的是(B)。

    A:将抽象部分与它的现实部分分离,使它们都可以独立变化。

    B:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新

    C:用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象

    D:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系

     

    40、以下哪一种说法可用来描述备忘录(Memento)(C)。

    A:保证一个类只有一个实例,并提供一个访问它的全局访问点

    B:将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化;对请求进行排队或记录请求日志,以及支持可撤销的操作

    C:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态

    D:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示

     

    41、以下意图哪个是用来描述ITERATOR(迭代器)?(C)

    A. 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系

    B. 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象

    C. 提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示

    D. 运用共享技术有效地支持大量细粒度的对象

    第十章 行为型_状态、策略、访问者模式

    42、关于模式适用性,以下(A)不适合使用策略(Strategy)模式。

    A:当一个对象必须通知其他对象,而它又不能假定其他对象是谁。换言之,用户不希望这些对象是紧密结合的

    B:许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法

    C:需要使用一个算法的不同变体。例如,用户可能会定义一些反应不同的空间/时间权衡的算法。当这些变体实现为一个算法的类的层次时,可以使用策略模式

    D:算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构

     

    43、以下意图(B)可用来描述访问者(Visitor)。

    A:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新

    B:表示一个作用于某对象结构中的各个元素的操作

    C:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态

    D:用原型实例指定对象的种类,并且通过复制这些原型创建新的对象

     

    44、以下意图哪个是用来描述STATE(状态)?(C)

    A. 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系

    B. 提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示

    C. 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类

    D. 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态

    第十一章 行为型_中介者、空对象、模板模式

    45、关于模式适用性,以下(B)不适合使用模板方法(Template Method)模式。

    A:一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现

    B:当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变

    C:各子类中公共的行为应该被提取出来并集中到一个公共父类中以避免代码重复。首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码

    D:控制子类扩展。模板方法只在特定点调用“hook”操作,这样就只允许在这些点进行扩展 

     

    46、以下哪一项(D)可用来描述中介者(Mediator)。

    A:提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象

    B:将抽象部分与它的现实部分分离,使它们都可以独立变化

    C:定义一个用于创建对象的接口,让子类决定实例化哪一个类

    D:用一个中介对象来封装一系列的对象交互

     

    47、以下意图哪个是用来描述TEMPLATE METHOD(模板方法)?(A)

    A. 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中

    B. 为其他对象提供一种代理以控制对这个对象的访问

    C. 将抽象部分与它的实现部分分离,使它们都可以独立地变化

    D. 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系

    第十二章 软件体系结构

    多选题汇总

    第一章 软件设计模式体系结构概述

    1、软件设计模式的最关键的元素包括(ABCD)。

    A.名称        B.问题        C.解决方案        D.参与者和协作者

     

    2、常用的描述设计模式的格式有(ABCD)。

    A.意图        B.动机        C.适用性        D.结构

     

    3、面向对象系统中功能复用的最常用技术是(A,B)。

    A.类继承        B.对象组合        C.使用抽象类        D.使用实现类

    第二章 创建型_简单工厂、工厂方法、抽象工厂

    4、当应用工厂方法(Factory Method)模式时要考虑(ABCD)。

    A:主要有两种不同的情况        B:参数化工厂方法

    C:特定语言的变化和问题        D:使用模板以避免创建子类  

     

    5、工厂模式分为(ABC)3种类型。

    A:简单工厂        B:工厂方法        C:抽象工厂        D:单例

    第三章 创建型_单/多例、建造者、原型

    6、单例模式中,两个基本要点(AB)和单子类自己提供单利。

     A:构造函数私有        B:唯一实例        C:静态工厂方法        D:动态工厂方法

     

    7、以下属于Singleton(单例)模式的优点是?(A,B,C,D)

    A.对唯一实例的受控访问        B.允许对操作和表示的精化

    C.允许可变数目的实例        D.比类操作更灵活

     

    8、使用原型(Prototype)模式时要考虑的问题有(ABC)。

    A:使用一个原型管理器        B:实现克隆操作        C:初始化克隆对象        D:用类动态配置应用

     

    9、建造者模式包括:(ABCD)等主要角色。

    A:产品角色(Product)        B:抽象建造者(Builder)        C:具体建造者(ConcreteBuilder)        D:指挥者(Director) 

    第四章 结构型_适配器

    10、对象的结构模式包括(ABCD)。

    A:代理人模式         B:合成模式         C:享元模式         D:装饰模式

     

    11、适配器模式分为(AB) 2 种。

    A:类结构型模式         B:对象结构型模式         C:代理模式         D:组合模式

    第五章 结构型_合成、装饰模式

    12、根据合成模式中提供父类对象的管理方法所在位置,即实现接口的区别分为两种形式(AB)

    A:透明方式        B:安全方式        C:模糊方式        D:继承方式

     

    13、使用装饰模式时应注意(ABCD )。

    A:接口的一致性        B:省略抽象的Decorator类

    C:保持Component类的简单性        D:装饰对象包含一个真实对象的引用

     

    14、装饰器模式的优点是(ABCD)。

    A:装饰模式与继承关系的目的都是要扩展对象的功能,但是装饰模式可以提供比继承更多的灵活性

    B:装饰模式允许系统动态地决定贴上装饰,或者除掉一个不需要的装饰,继承则不同,继承是静态的,它在系统运行前就决定了

    C:通过使用不同的具体装饰类以这些装饰类的排列组合,设计师可以创造出很我不同行为的组合

    D:这种比继承更加灵活机动的特性,也同时意味着装饰模式比继承更加容易出错

     

    15、Decorator(装饰)模式主要两个优点有以下那些?(A,B)

    A.比静态继承更灵活

    B.避免在层次结构高层的类有太多的特征

    C.有许多小对象,很容易对它们进行定制,但是很难学习这些系统,排错也很困难。

    D.Decorator与它的Component不一样,Decorator是一个透明的包装。

     

    16、结构型模式中最体现扩展性的几种模式是(B,C)

    A.适配器(Adapte)模式        B.合成(Composite)模式        C.装饰(Decorator)模式        D.桥接(Bridge)模式

    第六章 结构型_代理、享元模式

    17、代理模式有以下的应用场景(ABCD)。

    A:为了隐藏目标对象存在于不同地址空间的事实,方便客户端访问时        B:要创建的目标对象开销很大时

    C:控制不同种类客户对真实对象的访问权限时        D:当调用目标对象需要附加一些额外的处理功能时

     

    18、代理模式的主要优点(ABCD)。

    A:代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用

    B:代理对象可以扩展目标对象的功能

    C:代理模式能将客户端与目标对象分离

    D:降低了系统的耦合度

    第七章 结构型_外观、桥梁、过滤模式

    19、在不破坏类封装性的基础上,使得类可以同不曾估计到的系统进行交互,主要体现在(AD )。

    A:适配器( Adapte)模式        B:合成( Composite)模式        C:原型(Prototype )模式        D:桥接(Bridge) 模式 

     

    20、桥接( Bridge )模式的优点有(ABD)。

    A:分离接口及其实现部分        B:提高可扩充性        C:改变值以指定新对象        D:实现细节对客户透明

     

    21、使用桥接(Bridge)模式时需要注意(ABC)。

    A:仅有一个实现类的接口Implementor        B:创建正确的实现类的接口Implementor对象

    C:共享实现类的接口 Implementor对象        D:想使用一个已经存在的类,而它的接口不符合需求

     

    22、外观(Facade)模式的优点有(ABCD )。

    A:降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响到调用它的客户类

    B:对客户屏蔽了子系统组件,减少了客户处理的对象数目

    C:使得子系统使用起来更加容易

    D:降低了大型软件系统中的编译依赖性,简化了系统在不同平台之间的移植过程

    第八章 行为型_责任链、命令、解释器模式

    23、责任链模式优点包括(ABCD)。

    A:降低耦合度,它将请求的发送者和接收者解耦

    B:简化了对象。使得对象不需要知道链的结构

    C:增强给对象指派职责的灵活性,通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任

    D:增加新的请求处理类很方便

     

    24、解释器模式的优点是(ABC)。

    A:可扩展性比较好,灵活         B:增加了新的解释表达式的方式

    C:易于实现简单文法         D:对于复杂的文法较易维护

    第九章 行为型_迭代器、备忘录、观察者模式

    25、观察者(Observer)模式适用于(ABC)。

    A:当一个抽象模型有两个方面,其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立的改变和复用

    B:当对一个对象的改变需要同时改变其它对象,而不知道具体有多少对象有待改变

    C:当一个对象必须通知其他对象,而他又不能假定其它对象是谁。换言之,用户不希望这些对象是紧密耦合的

    D:一个对象结构包含很多类对象,它们有不同的接口,而想对这些对象实施一些依赖于其具体类的操作  

     

    26、观察者模式允许用户独立地改变目标和观察者。用户可以单独复用目标对象而无须同时复用其观察者,反之亦然。它也使用户可以在不改动目标和其他的观察者的前提下增加观察者。下面(BCD)是观察者模式其他的优缺点。

    A:它使得状态转换显示化        B:支持广播通信        C:意外的更新        D:目标和观察者间的抽象耦合  

     

    27、观察者模式(Observer Pattern)还有(ABCD)其他名称。

    A:发布-订阅(Publish/Subscribe)模式        B:模型-视图(Model/View)模式

    C:源-监听器(Source/Listener)模式        D:从属者(Dependents)模式

     

    28、备忘录模式有以下(ABCD)的效果。

    A:保持封装边界        B:它简化了原发器        C:使用备忘录可能代价很高        D:维护备忘录的潜在代价

     

    29、迭代器模式的结构包括(ABCD)。

    A:抽象聚合(Aggregate)角色        B:具体聚合(ConcreteAggregate)角色

    C:抽象迭代器(Iterator)角色        D:具体迭代器(ConcreteIterator)角色

     

    30、以下意图那些是用来描述ITERATOR(迭代器)?(C)

    A.使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。

    B.用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

    C.提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。

    D.运用共享技术有效地支持大量细粒度的对象。

    第十章 行为型_状态、策略、访问者模式

    31、状态(State)模式有下面(ABC)效果。

    A:它将与特定状态相关的行为局部化,并且将不同状态的行为分割开来

    B:它使得状态转换显示化

    C:通过类层次进行访问

    D:State对象可以被共享

     

    32、下面(ABC)是策略(Strategy)模式的优缺点。

    A:相关算法系列         B:一个替代继承的方法         C:消除了一些条件语句         D:改变对象外壳与改变对象内核

    第十一章 行为型_中介者、空对象、模板模式

    33、模板方法模式的基本方法是整个算法中的一个步骤,它包含(ABC)几种类型。

    A:抽象方法         B:具体方法         C:钩子方法         D:继承方法

     

    34、模板方法的主要优点是(ABCD)。

    A:它封装了不变部分,扩展可变部分

    B:它把认为是不变部分的算法封装到父类中实现,而把可变部分算法由子类继承实现,便于子类继续扩展

    C:它在父类中提取了公共的部分代码,便于代码复用

    D:部分方法是由子类实现的,因此子类可以通过扩展方式增加相应的功能,符合开闭原则

     

    35、中介者模式有以下(ABD)优点。

    A:简化了对象之间的交互         B:简化了同事类的设计和实现

    C:封装了转换规则         D:减少了子类生成 

    第十二章 软件体系结构

    36、软件设计采用的方法是(ABCD)。

    A:抽象与逐步求精        B:模块化与信息隐藏        C:内聚        D:耦合 

     

    37、Kruchten对软件体系结构的定义包括(ABCD)。

    A:概念角度        B:模块角度        C:运行角度        D:代码角度

     

    38、经典的体系结构风格包括(ABCDE)。

    A:数据流风格        B:调用/返回风格        C:独立构件风格        D:虚拟机风格        E:仓库风格

     

    39、分布式方法开发系统的主要优势是(ABCD)。

    A:资源共享与开放性        B:并发性与可扩展性        C:容错性与透明性        D:开放性

     

    40、Web服务开发生命周期包括:(ABCD)。

    A:构建        B:部署        C:运行        D:管理 

     

    41、云计算软件体系结构包括:(ABCD)。

    A:硬件层        B:基础设施层        C:平台层        D:应用层 

     

    42、ABSD方法第一个步骤功能分解的标准:(ABCD )。

    A:功能聚合        B:数据或计算行为的类似模式        C:类似的抽象级别        D:功能的局部性

     

    43、以下是模式的基本要素的是(ABCD)

    A:名称        B:意图        C:解决方案        D:参与者和协作者

     

    44、常用的描述设计模式的格式有(ABCD)

    A:意图        B:动机        C:适用性        D:结构

    判断题汇总

    第一章 软件设计模式体系结构概述

    1、“不要和陌生人说话”是迪米特原则的通俗表述。(✓) 

    2、依据设计模式思想,程序开发中应优先使用的是创建。 (✗)

    3、设计模式一般用来解决同一问题的不同表相。(✓) 

    4、学习设计模式可以缩短软件的开发周期。(✓) 

    第二章 创建型_简单工厂、工厂方法、抽象工厂

    5、简单工厂模式可以根据参数的不同返回不同的实例。(

    6、工厂方法模式的主要角色有:抽象工厂(Abstract Factory)、具体工厂(Concrete Factory)、抽象产品(Product)和具体产品(Concrete Product)。(

    7、抽象工厂模式是简单工厂模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。(✗)

    8、创建型模式把实例化的责任与使用实例的责任分割开来。(

    9、由于Abstract  Factory类和具体工厂方法可以分离,因此在实现时会产生更多的类。(✗)

    第三章 创建型_单/多例、建造者、原型

    10、单例模式分为懒汉式单例和饿汉式单例两种。(

    11、原型(Prototype)模式包含:抽象原型类、具体原型类和访问者类等3个部分。(

    12、建造者的退化模式是通过省略使用者角色完成退化的。(✗)

    13、懒汉式单例类在第一次被引用时将自己实例化。

    第四章 结构型_适配器

    14、类适配器模式和对象适配器模式可用Java实现。

    15、类结构型模式之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。

    16、适配器模式不可以模拟新能源汽车的发动机。(✗)

    17、一个类的结构模式的典型例子就是类的适配器模式。

    18、对象的结构模式描述怎样把各种不同类型的对象组合在一起,以实现新的功能,其是动态的。

    19、作为适配器模式的一个特例,缺省适配器模式在Java语言中有着特殊的应用。

    第五章 结构型_合成、装饰模式

    20、使用装饰模式会产生比使用继承关系更多的对象,更多的对象会使得查错变得困难,特别是这些对象看上去都很像。

    21、需要增加由一个基本功能的排列组合而产生的非常大量的功能,从而使继承关系变得不现实,此时可以使用装饰器模式。

    22、需要扩展一个类的功能,或给一个类增加附加责任时可以使用装饰器模式。

    第六章 结构型_代理、享元模式

    23、代理模式在客户端和目标对象增加一个代理对象,会造成请求处理速度变慢。

    24、代理模式降低了系统的复杂度。(✗)

    25、系统中有大量对象时可以使用享元模式。

    第七章 结构型_外观、桥梁、过滤模式

    26、外观(Facade)模式能很好地限制客户使用子系统类。(✗)

    27、桥梁(桥接Bridge)模式中,抽象类依赖实现类。

    28、JAVA 的三层开发模式可用门面(外观Facade)模式。

    第八章 行为型_责任链、命令、解释器模式

    29、使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系可用来描述职责链(Chain of Responsibility)。

    30、命令模式中,请求以命令的形式包裹在对象中,并传给调用对象。

    31、责任链模式可动态指定一组对象处理请求。

    32、解释器模式可利用场景比较少,JAVA 中如果碰到可以用 expression4J 代替。

    33、职责链模式中纯的职责链模式比不纯的职责链模式优先级高。(✗)

    第九章 行为型_迭代器、备忘录、观察者模式

    34、观察者可以改变被观察者的状态,再由被观察者通知所有观察者依据被观察者的状态进行。(✗)

    35、被观察者可以通知观察者进行更新。

    36、拍卖的时候,拍卖师观察最高标价,然后通知给其他竞价者竞价,可以用观察者模式。

    第十章 行为型_状态、策略、访问者模式

    37、访问者模式使得易于增加新的操作。

    38、访问者集中相关的操作而分离无关的操作。

    39、策略对象改变 context 对象的执行算法。

    40、策略模式关键在于实现不同的接口。(✗)

    41、策略模式会使策略类会增多。

    42、在对象的数据类型很少改变,但是需要经常的改变操作或者增加新操作的情况下可以使用访问者模式。

    第十一章 行为型_中介者、空对象、模板模式

    43、模板方法对每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象。

    44、模板方法父类中的抽象方法由子类实现,子类执行的结果会影响父类的结果,这导致一种反向的控制结构,它提高了代码阅读的难度。

    45、在实际开发中,通常采用不定义中介者接口,把具体中介者对象实现成为单例的方法来简化中介者模式。

    46、中介者模式用来降低多个对象和类之间的通信复杂性。

    47、模板模式的关键在于在抽象类实现,其他步骤在子类实现。

    第十二章 软件体系结构

    48、面向对象系统必须修改所有显式调用它的其它对象,并消除由此带来的一些副作用。

    49、ATAM:Architecture Tradeoff Analysis Method(体系结构权衡分析方法)不可调整步骤顺序。(✗)

    50、单态类只可有一个实例。(✓)

    51、适配器模式属于创建型模式结构型。(✗)

    52、在设计模式中,“效果”只是指“原因和结果”。

    53、设计模式使代码编制不能真正工程化。

    54、面向对象语言编程中的异常处理,可以理解为责任链模式。

    55、反模式就是反对在软件开发过程中使用设计模式分析:反模式用来解决问题的带有共性的不良方法。(✗)

    56、单一职责原则表现在面向对象的程序中就是“高内聚、低耦合”。

    57、设计模式只能遵从使用,不能也无需创新。(✗)

    58、在面向对象编程时,无论何时何地都要使用GoF所给出的设计模式,这样编写的代码才比较好。(✗)

    59、工厂方法能够提高内聚性,松散耦合,并且有助于测试。(✗)

    60、对象要么构造其它对象,要么使用其它对象,绝不要两者兼顾。

    填空题汇总(由选择题变来的,因为没找到完整选项)

    1、设计模式一般用来解决什么样的问题:同一问题的不同表相

    2、Open-Close原则的含义是一个软件实体:应当对扩展开放,对修改关闭。

    3、当我们想创建一个具体的对象而又不希望指定具体的类时,使用创建型模式。

    4、要依赖于抽象不要依赖于具体。即针对接口编程不要针对实现编程:依赖倒转原则

    5、依据设计模式思想,程序开发中应优先使用的是委派关系实现复用。

    6、设计模式的两大主题是系统复用与系统扩展

    7、单体模式中,两个基本要点(AB)和单体类自己提供单例。 A .构造函数私有    B.唯一实例

    8、下列模式中,属于行为模式的是观察者

    9、软件体系结构是指一个系统的有目的的设计和规划,这个设计规划既不描述活动,也不描述系统怎样开发,它只描述系统的组成元素及其相互的交互协作

    10、一个UML模型只描述了一个系统要做什么,它并没告诉我们系统是怎么做

    11、接口是可以在整个模型中反复使用的一组行为,是一个没有属性而只有方法的类。

    12、多重性指的是,某个类有个对象可以和另一个类的对象关联。

    13、当一个类的对象可以充当多种角色时,自身关联就可能发生。

    14、在泛化关系中,子类可以替代父类。后前者出现的可以相同地方。反过来却不成立。

    15、最通常的依赖关系是一个类操作的形构中用到了另一个类的定义。

    16、组成是强类型的聚集,因为聚集中的每个部分体只能属于一个整体。

    17、实现的符号和继承的符号有相似之处,两者的唯一差别是实现关系用虚线表示,继承关系用实线表示。

    18、设计模式中应优先使用对象组合而不是类继承

    19、在观察者模式中,表述错误的是观察者可以改变被观察者的状态,再由被观察者通知所有观察者依据被观察者的状态进行。

    20、对于违反里式代换原则的两个类,可以采用的候选解决方案错误的是:以上方案错误

    21、下列模式属于结构型设计模式的是(  AB )A、Composite B、享元(Flyweight)模式

    22、关于继承表述错误的是:继承本质上是“白盒复用”,对父类的修改,不会影响到子类。

    23、对于依赖倒转的表述错误的是从选项B的角度论述,一个对象可以有多个接口。

    24、可以使用哪一种设计模式限制类的实例唯一?单体模式

    25、Java数据库连接库JDBC用到哪种设计模式?工厂方法

    26、关于运用GOF工厂方法的效果Consequences,说法不正确的是有利于产品的一致性

    27、在应用程序中可用哪些设计模式分离出算法?策略模式

    28、工厂方法也称为虚构造器

    29、可以使用哪种设计模式将抽象和实现解耦,使得抽象和实现可以独自变化?桥接模式

    30、面向对象的七条基本原则包括:开闭原则,里式代换原则,合成聚合原则以及迪米特法则依赖倒转单一原则接口隔离

    31、在存在继承关系的情况下,方法向超类方向集中,而数据向子类方向集中。

    32、适配器模式,分为类的适配器和对象的适配器两种实现。其中类的适配器采用的是( 继承  )关系,而对象适配器采用的是组合聚合关系。

    33、设计模式的四个基本要素是名字意图问题解决方案

    34、创建型模式的根本意图是要把对象的创建使用分离的责任进行分离,从而降低系统的耦合度

    35、工厂模式分为简单工厂工厂方法抽象工厂三种类型。

    36、门面模式是迪米特法则的典型运用。

    37、MVC模型的基本工作原理是基于观察者模式,实现是基于命令模式。

    38、设计模式的思想根源是开闭基本原则的宏观运用,本质上是没有任何模式的,发现模式的人永远是大师,而死守模式的人,最对只能是一个工匠。

    39、以下哪些问题通过应用设计模式能够解决(AD)A、指定对象的接口  D、设计应支持变化

    30、面向对象系统中功能复用的最常用技术是类继承对象组合。

    31、常用的基本设计模式可分为创建型、结构型和行为型。

    32、以下关于创建型模式说法正确的是创建型模式关注的是对象的创建。

    33、以下属于创建型模式的是抽象工厂(Abstract Factory)模式单例(Singleton)模式。

    34、原型(Prototype)模式是利用一个对象,快速生成一批对象。

    35、在不破坏类封装性的基础上,使得类可以同不曾估计到的系统进行交互。主要体现在适配器(Adapter)模式桥接(Bridge)模式。

    36、结构型模式中最体现扩展性的几种模式是装饰(Decorator)模式

    37、行为类模式使用( C )在类间分派行为。C、对象组合  

    38、以下属于行为对象模式的是模板(Template Method)模式、迭代器(Iterator)模式命令(Command)模式观察者(Observer)模式。

    39、封装分布于多个类之间的行为的模式是访问者(Visitor)模式。

    40、Observer(观察者)模式适用于当一个对象必须通知其它对象,而它又不能假定其它对象是谁。也就是说你不希望这些对象是紧耦合的。

    41、Java的异常处理机制可理解为哪一种行为模式( C )。C、职责链(Chain of Responsibility)模式

    42、单一职责原则的核心思想是系统中的每一个对象都应该只有一个单独的职责,而所有对象所关注的就是自身职责的完成。

    43、开闭原则的核心思想是一个对象对扩展开放,对修改关闭;实现此原则的关键就在于抽象、分离出扩展部分和修改部分。

    44、里氏替换原则的核心思想是在任何父类出现的地方都可以用它的子类来替代。

    45、依赖倒置原则的核心思想是要依赖于抽象,而不要依赖于具体的实现。

    46、接口隔离原则的核心思想是不应该强迫客户程序依赖于他们不用的方法。即一个接口不需要提供太多的行为,应该只提供一种对外的功能,不应该把所有的操作都封装在一个接口中。

    47、迪米特原则的核心思想是一个对象应当对其它对象尽可能少的了解。或者说,只和你的朋友说话。这样一些对象可以看做朋友:当前对象本身、通过方法的参数传递进来的对象、当前对象所创建的对象、当前对象的实例变量所引用的对象和方法内所创建或者实例化的对象。

    48、优先使用组合原则的核心思想是优先使用组合而非继承。

    49、设计模式应该面向对象编程。

    50、依赖倒转原则要求抽象不应该依赖于细节,细节应当依赖于抽象。

    51、主要用于描述对类和对象怎样交互和怎样分配职责的模式是行为型模式

    52、MVC模型的基本工作原理是基于(观察者)模式,实现是属于命令模式。

    53、组合模式属于结构型模式、原型模式属于创建型模式。

    54、创立型模式的根本意图是要把对象的创建使用的责任进行分离,从而降低系统的耦合度

    55、简单工厂模式可以根据参数的不同返回不同的实例。

    简答题汇总

    1、什么是设计模式?设计模式目标是什么?

            设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解,保证代码可靠性。

     

    2、设计模式中一般都遵循的原则有什么?

            开闭原则、根据场景进行设计原则、优先组合原则、包容变化原则

     

    3、“Gang of Four”针对“创建优秀面向对象设计”建议了哪些策略?

            针对接口编程、优先使用对象组合而不是类继承,找到并封装变化点。

     

    4、面向对象系统中功能复用的两种最常用技术是什么?

            类继承和对象组合,类继承允许你根据其他类的实现来定义一个类的实现。父类的内部细节对子类可见。类继承是在编译时刻静态定义的,且可直接使用,类继承可以较方便地改变被复用的实现。对象组合是类继承之外的另一种复用选择。新的更复杂的功能可以通过组装或组合对象来获得。对象组合要求被组合的对象具有良好定义的接口。

     

    5、只根据抽象类中定义的接口来操纵对象有什么好处?  

            1) 客户无须知道他们使用对象的特定类型,只须对象有客户所期望的接口。

            2) 客户无须知道他们使用的对象是用什么类来实现的,他们只须知道定义接口的抽象类。

     

    6、在MVC模型中M、V、C分别指什么?简述它们之间的关系?

            M:模型(Model),V:视图(View),C:控制Controller)。

            MVC模式的目的就是实现Web系统的职能分工。

            Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。

            View层用于与用户的交互,通常用JSP来实现。

            Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。

     

    7、什么是开闭原则?

            软件实体应当对扩展开放,对修改关闭,软件系统中包含的各种组件,例如模块(Modules)、类(Classes)以及功能(Functions)等,应该在不修改现有代码的基础上,引入新功能。开闭原则中“开”,是指对于组件功能的扩展是开放的,是允许对其进行功能扩展的;开闭原则中“闭”,是指对于原有代码的修改是封闭的,即不应该修改原有的代码。

     

    8、设计数据库的系统日志,要考虑使用哪些设计模式?

            命令模式,备忘录模式,外观模式

     

    9、使用工厂模式的主要原因是什么?

            工厂模式定义:提供创建对象的接口。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。

     

    10、在面向对象设计中,《编译原理》的有限状态机可以什么样解决方案完成?猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒问:(1)设计可能用到什么设计模式?(2)画出其类图。

            观察者模式分析:要有联动性,老鼠和主人的行为是被动的;考虑可扩展性,猫的叫声可能引起其他联动效应。

     

    11、单例模式的两种实现方法,并说明优缺点?

            懒汉式,在类被加载时,唯一的实例已经被创建。这个模式在java中很容易实现,在其他语言中很难。

            饿汉式,在类加载的时候不创建单例实体。只有在第一次请求实例的时候创建,并且只在第一次创建后不再创佳该类的实例。 

     

    12、什么是对象粒度?  

            所谓的对象粒度就是对象从抽象到具体的描述的程度。同样一个系统,同样的需求。两个设计师给出两种设计。两个设计代码行数差不多,但是类的数目不同。例如有一个对象,我可以用10行代码去构造它,我也可以用20行代码,后者比前者更为精确。

     

    13、MVC模式是个复合模式,请写出你两种你所知道的MVC中使用的模式。

            观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

            策略模式:定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

     

    14、举例说明,适配器模式和装配器在Java IO中的应用。

            装饰者模式:在由InputStream,OutputStream,Reader和Writer代表的等级结构内部,有一些流处理器可以对另一些流处理器起到装饰作用,形成新的,具有改善了的功能的流处理器。装饰者模式是Java I/O库的整体设计模式。这样的一个原则是符合装饰者模式的。

            适配器模式:在由InputStream,OutputStream,Reader和Writer代表的等级结构内部,有一些流处理器是对其它类型的流源的适配。这就是适配器模式的应用,适配器模式应用到了原始流处理器的设计上面,构成了I/O库所有流处理器的起点。

     

    15、在面向对象程序设计中,常常需要避免过多case语句或者if语句,请给出一种设计模式避免过多的条件分支语句,同时指出这种设计模式如何帮助避免过多的Case语句?

           访问者模式。例如 switch(pt){ case A:   break; case B: break; ..... }  

           把每个条件作成一个类,比如 A条件  class A {  public void accept() {//处理逻辑 } }

           然后把每个条件的处理方法都用一个类来管理.  public class CommonVisitor{ public void visit(A a){a.accept();}//其他条件的访问方法     public void visit(B b){ b.accept();}}

           main里面就这样调用就行。public static void main(Stirng args[]){CommonVisitor visitor = new CommonVisitor();//如果是想用A条件,则visitor.visit(new A());} 这样写的好处,以后先加条件的话我只需要定义新的条件类就行,还有就是在CommonVisitor添加新条件的访问方法就行,这样就很好作到一个条件管理一个逻辑。

    应用题汇总

    1、公司架构:经理、工程师、技师和后勤人员都是公司的雇员,经理管理工程师、技师和后勤人员。高层经理领导较低级别的经理。典型层次图如下:可以使用哪种设计模式实现公司的层级关系?并说明为什么? 组合模式,第一,其公司关系架构为树形结构;第二,其表示了部分-整体关系(自己扩展)

     

    2、认真分析以下类图:

    要求:①说明选择了什么设计模式?②写出其程序代码。

    解:①本题使用了迭代器模式 ②其参考程序代码如下所示:

    interface Aggregate{
        Iterator createIterator();
    }
    interface Iterator{
        void first();
        void next();
        boolean hasNext();
        Object currentItem();
    }
    class ConcreteAggregate implements Aggregate{
        private Object[] obj={"筷","杯","锅”,"碗","瓢","盆"};
        public Iterator createIterator(){
            return new ConcreteIterator();
        }
        private class ConcreteIterator implements Iterator{
            private int currentIndex=0;
            public void first(){
                currentIndex=0;
            }
            public void next(){
                if(currentIndex < obj.length){
                    currentIndex++;
                }
            }
            public boolean hasNext(){
                return currentIndex < obj.length;
            }
            public Object currentItem(){
                return obj[currentIndex];
            }
        }
    }
    class Client{
        public static void process(Aggregate a){
            Iterator i = a.createIterator();
            while(i.hasNext()){
                System.out.println(i.currentItem().toString());
                i.next();
            }
        }
        public static void main(String a[]){
            Aggregate a = new ConcreteAggregate();
            process(a);
        }
    }

     

    3、某旅游公司(如:广之旅)欲利用假期为韶关学院学生开展夏令营活动,帮助大学生同国外大学生交流,根据如下描述选择合适的设计模式进行设计。1)该公司能帮助学生同国外多个大学生联系,如:哈佛大学、墨尔本大学;2)公司为每个国外大学分配一名翻译,如:中英翻译、中澳翻译。要求:(1)正确选择设计模式(2)画出其类图(3)正确解释该类图中的成员角色

    解:

            对于描述1可以选择使用中介者模式,对于描述2可以选择使用适配器模式,参考类图如下所示:

            在类图中,各类的角色如下:

            1)旅游公司:抽象中介者;

            2)广之旅:具体中介者;

            3)大学生:抽象同事类;

            4)韶关学院学生:是具体同事类,也是目标抽象类;

            5)哈佛大学生、墨尔本大学生:是具体同事类,也是适配者类;

            6)翻译1、翻译2:适配器类。

    真的不给点个赞吗!இ௰இ

    展开全文
  • 软件体系结构期末考试总结

    千次阅读 多人点赞 2019-12-30 23:19:35
    今天刚考完软件体系结构,把考前的知识点总结发到群里,仅供自己参考,但是里面的内容确实有用也是面试会问到的基础,所以这门课很重要的还是,只可惜我是预习了一两天就参加考试了 对了我们的教材是《软件工程体系...
  • 常用设计模式总结

    万次阅读 多人点赞 2019-07-31 19:13:12
    设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,是可复用面向对象软件的基础。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 ...
  • 本人的期末作业,研究生课程论文,书本是《Java软件体系结构设计模式标准指南》,分享给大家~~
  • 软件体系结构期末复习总结

    千次阅读 多人点赞 2020-08-18 21:14:41
    软件体系结构是具有一定形式的结构化元素,抽象的讲,软件体系结构包括构成系统的设计元素的描述,设计元素的交互,设计元素组合的模式,以及在这些模式中的约束。具体的讲,体系结构 = 组件+连接件+约束 组件:...
  • 4、常见设计模式 5、常见JAVA框架 1、软件框架 定义 面向某领域(包括业务领域,如ERP,和计算领域,如GUI)的、可复用的“半成品”软件,它实现了该领域的共性部分,并提供一系列定义良好的可变点以保证...
  • 仅供参考,以下是个人的课堂笔记,只有设计模式部分,这门课的sk老师非常负责,在学生中口碑很好,如果认真听课,课后及时总结,最后会更易读懂代码的架构以及为何这样设计的原因,对编程也有很大的帮助。...
  • 软件设计模式简要总结

    千次阅读 2018-04-25 10:48:47
    设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过...设计模式软件工程的基石脉络,如同大厦的结构一样。设计框架 可复用面向对象软件系统一般划分为两大类:应用程序工具箱和框架(Framework),...
  • 软件体系结构课程设计报告希望可以给准备课程设计的童鞋提供一些帮助。
  • 10个常见软件体系结构模式

    万次阅读 2018-05-07 14:06:04
    有没有想过如何设计大型企业级系统? 在开始主要软件开发之前,我们必须选择一个合适...架构模式类似于软件设计模式,但具有更广的范围。在本文中,我将简要地解释以下10种常见架构模式及其用法,优缺点。分层模式...
  • 海事大学 软件设计与体系结构 课程实验报告 2015-2016学年第一学期 实验四 设计模式应用 班 级 计算机科学技术2班 学 号 2220132451 姓 名 程子璇 指导教师 兄 成 绩 2016年 01 月 02日 目录 TOC \o "1-3" \h \z \...
  • 软件体系结构基础

    千次阅读 2020-12-27 12:57:33
    体系结构的模式选择设计模式做阐述,风格选择典型的三种体系结构风格做阐述,框架选择MVC、J2EE、PCMEFPCBMER框架做阐述,同时也对特定领域的软件体系结构的类属模型、参考模型,分布式系统结构的多处理机结构、...
  • 软件体系结构--观察者模式

    千次阅读 2019-05-13 00:09:15
    文章目录概念例子总结优点缺点 概念 观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。 观察者...
  • 软件体系结构原理、方法实践总结第1章:软件体系结构概论 什么是软件危机,软件危机的具体表现有哪些? 软件危机:落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发维护过程中出现一...
  • 软件体系结构

    千次阅读 2014-10-30 20:28:50
    软件体系结构笔记 L1.pdf 课程简介源起... 现状系统分析员遇到的困境解决之道 基于软件体系结构的开发 示意图软件体系结构的生命周期 体系结构的非形式化描述 通常使用自然语言描述概念和...
  • 软件体系结构风格介绍

    千次阅读 2020-02-18 12:46:38
    文章目录软件体系结构风格介绍(一)管道和过滤器风格(二)数据抽象面向对象风格(三)基于事件的隐式调用风格(四)层次系统风格(五)仓库风格(六)C2风格(七)基于层次消息总线的架构风格 软件体系结构风格...
  • 有关软件设计模式的定义很多,有些从模式的特点来说明,有些从模式的作用来说明。本教程给出的定义是大多数学者公认的,从以下两个方面来说明。 1. 软件设计模式的概念 软件设计模式(Software Design Pattern),...
  • 软件体系结构课程

    千次阅读 2012-11-20 17:00:52
    1.2软件体系结构风格、模式和框架 1.3软件结构的基本元素和连接 1.4软件体系结构设计的基本原则   1.1 软件体系结构的基本概念 软件体系结构软件工程的重要研究领域,软件体系结构并没有统一的定义。 90...
  • 一. 软件体系结构(架构) 软件体系结构的定义 ...比如,ANSI/IEEE 610.12-1990软件工程标准词汇对于体系结构定义是“体系架构是以构件、构件之间的关系、构件环境之间的关系为内容的某一系统的基本组织结构
  • Java知识体系最强总结(2021版)

    万次阅读 多人点赞 2019-12-18 10:09:56
    本人从事Java开发已多年,平时有记录问题解决方案和总结知识点的习惯,整理了一些有关Java的知识体系,这不是最终版,会不定期的更新。也算是记录自己在从事编程工作的成长足迹,通过博客可以促进博主阅读者的共同...
  • 软件体系架构模式

    2021-02-27 08:31:15
    重点介绍管道过滤器体系架构模式结构,实现,优缺点等,然后以J2EE的ServletFilter为例进行剖析它是怎样应用该架构模式的,最后简单阐述了在其它J2ee应用中(Jboss和Axis)的实践。 软件体系架构 1、软件体系...
  • 设计模式设计模式经典总结

    千次阅读 2015-08-14 00:52:17
    29.1 演讲任务 时间:7月23日下午 17点 地点:小菜办公室 人物:小菜、...明天全公司要开关于如何提高软件质量的研讨会,我希望到时你能做一个关于设计模式的演讲。” “我?演讲?给全公司?”小菜很惊讶于经理的
  • 大话设计模式、UML、设计模式Java版完全总结

    万次阅读 多人点赞 2018-03-23 09:54:09
    ),注意是笔记形式,优先适合于对设计模式有一定了解的读者,希望短时间快速温习的读者,同时也对所有设计模式添加了完整代码诠释注释,方便初学者的理解,另外,文章末尾有对所有设计模式总结,读者若对部分...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 53,728
精华内容 21,491
关键字:

软件设计模式与体系结构总结