软考系统架构师笔记之设计模式概述

系统架构设计师 责任编辑:小狐狸 2016-05-06

添加老师微信

备考咨询

加我微信

摘要:软考系统架构师笔记之设计模式概述

       >>>>点击进入了解系统架构设计师网络课堂 

   >>>>点击进入了解系统架构设计师培训视频

   >>>>点击进入了解系统架构设计师在线辅导

系统架构设计师是一个最终确认和评估系统需求,给出开发规范,搭建系统实现的核心构架,并澄清技术细节、扫清主要难点的技术人员。系统架构设计师考试合格人员能够根据系统需求规格说明书,结合应用领域和技术发展的实际情况,考虑有关约束条件,设计正确、合理的软件架构,确保系统架构具有良好的特性;能够对项目的系统架构进行描述、分析、设计与评估;能够按照相关标准编写相应的设计文档;能够与系统分析师、项目管理师相互协作、配合工作;具有高级工程师的实际工作能力和业务水平。

       架构师是由国外引进的一个概念,国外软件开发的几个职位是技术官、架构师、设计师、开发、测试,对应我们的公司应该是技术总监、架构师、系统分析员、程序员、测试人员。下面是希赛小编给考生们整理的一些考试相关内容与考生们分享。

   设计模式概述

   重复遇到的典型问题,描述这些共同问题和解决这些问题的方案就形成了所谓的模式。

   设计模式的历史

   模式分为几个部分:

   特定的情景(Context),指模式在何种情况下发生作用;

   动机(SystemofForce),指问题或预期的目标;

   解决方案(Solution),平衡各动机或解决所阐述问题的构造或配置。

   每个模式描述了一个在某种特定情境下不断重复发生的问题,以及解决该问题解决方案的核心所在。

   为什么要使用设计模式

   面向对象设计时需要考虑封装性、力度大小、依赖关系、灵活性、可重用性等。

   1、简化并加快快设计

   无需从底层做起,重用成功的设计,节约开发时间,提高软件质量。

   2、方便开发人员之间的通信

   可以更准确地描述问题及问题的解决方案,使解决方案具有一致性。

   3、降低风险

   4、有助于转到面向对象技术

   开发人员对新技术往往会有抵触或排斥心理,对成熟的设计模式具有以下特性:

   1.巧妙。

   2.通用,不依赖于系统、语言、领域。

   3.不仅仅停留在理论上。

   4.简单。

   5.可重用。

   6.面向对象。

   设计模式的组成元素

   1、模式名,简洁地描述了模式的本质,可以帮助我们思考。

   2、问题或意图,解释了设计问题和问题存在的前因后果,可能描述了特定的设计问题。

   3、情景,告诉我们该模式的适用性。

   4、动机,描述相关的动机和约束,通常需要对各期望的目标进行有限排序,动机阐明了问题的复杂性,定义了在相互冲突时所采取的各种权衡手段。

   5、解决方案,因为模式就像一个模板,所以解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合。

   6、示例,帮助读者理解模式的具体使用方法。

   7、结果情景,阐述了模式后续状态和副作用。

   8、基本原理,解释该模式如何、为何能解决当前问题。

   9、相关模式,包括静态的和动态的,迁到模式、后续模式、替代模式。

   10、已知应用,通常好的模式前面都有一个摘要,提供简短的总结和概述,为模式描绘出一个清晰的图画,提供有关该模式能够解决问题的快速信息。

   新技术可能带来的效果持怀疑态度。

   模式应该说明它的目标读者,以及对读者有哪些知识要求。

   设计模式的分类

   软件模式主要可分为设计模式、分析模式、组织和过程模式等。

   设计模式主要用于得到简洁灵活的系统设计。

   按设计模式的目的划分,创建型、结构型、行为型;

   按设计模式范围划分,类设计模式、对象设计模式。

   1、创建型模式,对对象实例化过程的抽象,采用抽象类所定义的接口,封装了对象如何创建、组合等信息。

   2、结构型模式,如何组合已有的类和对象以及获得更大的结构。

   3、行为型模式,不仅描述对象或类的模式,还描述它们之间的通信模式,特别是描述一组对等的对象怎样互相协作完成其中任一对象无法单独完成的任务。

   设计模式实例

   创建性模式

   通过该了的子类来创建对象的。但是,这可能会限制在系统内创建对象的类型或数目。

   1、AbstractFactory模式

   在不指定具体类的情况下,为创建一些列相关或相互依赖的对象提供了接口。

   提供了一个可以确定合适的具体类的抽象类。

   优点:

   可以与具体类分开。

   更容易在产品系列中转换。

   提高了产品间的一致性。

   以下情况应该使用AbstractFactory模式:

   系统独立于产品的创建、组成、表示。

   系统配置成具有多个产品的系列。

   相关产品对象系列是共同使用的,而且必须确保这一点。

   你希望提供产品的类库,只开放其接口。

   2、Builder模式

   将复杂对象的构件与表示相分离,相同的构造过程可以创建不同的对象,通过只指定对象的类型和内容。

   一次就可以创建所有的复杂对象,而其他模式一次就只能创建一个对象。

   优点:

   可以对产品内部表示进行改变。

   将构造代码与表示代码相分离。

   以下情况应该使用Builder模式:

   算法独立于组成对象。

   构造过程必须允许已构件对象有不同表示。

   3、FactoryMethod模式

   实例化工作交给其子类,可以在不修改代码的情况下引入新类,因为新类只实现了接口。

   优点:

   代码只处理接口,因此可以使用任何实现了接口的类。

   在类中创建对象比直接在客户端创建要更加灵活。

   以下情况中,应该使用FactoryMethod模式:

   类不能预料它必须创建的对象的类。

   类希望其子类指定要创建的对象。

   类将责任转给某个帮助子类,而用户希望定位那个被授权的帮助子类。

   4、Prototype模式

   只要将对象类定义成能够复制自身就可以实现。

   优点如下:

   可以在运行时添加或删除产品。

   通过改变值指定新对象。

   通过改变结构制定新对象。

   减少子类的生成和使用。

   可以用类动态地配置应用程序。

   以下情况中,应该使用Prototype模式:

   运行时,指定需要实例化的类,例如动态载入。

   避免构建与产品的类层次结构相似的工厂类层次结构。

   5、Singleton模式

   确保一个类只有一个实例,并且提供全局访问入口,确保使用这个实例所有的对象使用相同的实例。

   优点:

  对单个实例的受控访问。

   命名空间的减少。

   允许改进操作和表示。

   允许改变数目的实例。

   比类操作更灵活。

   结构性模式

   机构性模式控制较大部分之间的关系。

   它将以不同的方式影响应用程序。

   允许在补充写代码或自定义代码的情况下创建系统。

   具有增强的重复使用性和应用性能。

   1、Adapter模式

   可以充当两个类之间的媒介,可以转换一个类的接口,被另外一个类使用,使得具有不兼容接口的类能够系统使用。

   优点:

   允许多个不兼容的对象进行交互和通信。

   提高已有功能的重复使用性。

   以下情况,应该使用Adapter模式:

   要使用已有类,而该类接口与所需的接口并不匹配。

   要创建可重用的类,该类可以与不相关或未知类进行协作。

   要在一个不同于已知对象接口的接口环境中使用对象。

   必须要进行多个源之间的接口转换的时候。

   2、Bridge模式

   将一个复杂的组件分成两个独立的但又相关的继承层次结构:功能性抽象和内部实现。

   优点:

   接口与实现相分离。

   提高了可扩展性。

   对客户端隐藏了实现的细节。

   以下情况中,应该使用Bridge模式:

   避免在抽象及其实现之间存在一直的绑定。

   抽象及其实现可以使用子类进行扩展。

   抽象的实现被改动不用重新编译代码。

   3、Composite模式

   创建树形层次结构来改变复杂性。

   优点:

   定义了由主要对象和符合对象组成的类层次结构。

   添加新的组件类型更加简单。

   结构的灵活性和可管理性的接口。

   以下情况中,应该使用Composite模式:

   想要表示对象的整个或者部分的层次结构。

   想要客户端能够忽略符合对象和单个对象之间的差异。

   结构可以具有任何级别的复杂性,而且是动态的。

   4、Decorator模式

   不修改对象外观和功能的情况下添加或删除对象功能。

   优点:

   比静态继承具有更大的灵活性。

   避免了特征装载的类处于层次结构的过高级别。

   简化了编码。

   改进了对象的扩展性。

   在以下情况中,应该使用Decorator模式:

   在单个对象中动态并且透明地添加责任,不会影响其他对象。

   以后可能要修改的对象中添加责任。

   无法通过静态子类化实现扩展时。

   5、Facade模式

   为子系统中的一组接口提供了一个统一的接口。更容易使用子系统的高级接口。

   优点:

   在不减少系统所提供的选项的情况下,为复杂系统提供了简单接口。

   屏蔽了子系统组件。

   提高若耦合度。

   将客户端请求转换后发送给能够处理这些请求的子系统。

   以下情况中,应使用Facade模式:

   为复杂的子系统提供简单的接口。

   客户端和抽象的实现类中存在许多依赖关系。

   想要对子系统进行分层。

   6、Flyweight模式

   通过共享对象减少对象数目。

   通过共享一个接口来避免使用多个具有相同信息的实例所带来的开销。

   优点:

   减少了要处理的对象数目。

   如果对象能够持续,可以减少内存和存储设备。

   以下情况中,应该使用Flyweight模式:

   应用程序使用大量的对象。

   由于对象数目巨大,导致很高的存储开销。

   不依赖于对象的身份。

   行为性模式

   行为性模式影响系统的状态、行为流。

   简化、优化并且提高应用程序的可维护性。

   1、ChainofResponsibility模式

   在系统中建立一个链,在首先接收到它的级别处被处理,或者定位到可以处理它的对象。

   优点:

   降低了耦合度。

   增加面向对象制定责任的灵活性。

   类的集合可以作为一个整体。

   以下情况中,应该使用ChainofResponsibility模式:

   多个对象可以处理一个请求,而其处理器却是未知的。

   在不指定确切的请求接受对象的情况下,向几个对象中的一个发送请求。

   动态地指定能够处理请求的对象集。

   2、Command模式

   在对象中封装了请求。

   优点:

   将调用操作的对象与知道如何完成该操作的对象相分离。

   更容易添加新指令,因为不用修改已有类。

   以下情况中,应该使用Command模式:

   要通过执行的动作来参数化对象。

   在不同的时间指定、排序、执行请求。

   必须支持Undo、日志记录或事务。

   3、Interpreter模式

   解释定义其语法表示的语言,提供了语句解释器。

   优点:

   容易修改并扩展语法。

   更容易实现语法。

   以下情况中,应该使用Interpreter模式:

   语言的语法比较简单。

   效率并不是最主要的问题。

   4、Iterator模式

   为集合中的有序访问提供了一致的方法,而该集合是独立于基础集合。

   优点:

   支持集合的不同遍历。

   简化了集合的接口。

   以下情况中,应该使用Iterator模式:

   不开放集合对象内部表示的前提下,访问集合对象内容。

   支持集合对象的多重遍历。

   为遍历集合中的不同结构提供了统一的接口。

   5、Mediator模式

   通过引入一个能够管理对象间消息分布的对象,简化了系统中对象间的通信。提高了对象间的松耦合度,还可以独立地改变其间的交互。

   优点:

   去除对象间的影响。

   简化了对象间协议。

   集中化了控制。

   由于不再需要直接互传消息,单个组件变得更加简单,而且容易处理。

   由于不再需要包含逻辑来处理组件间的通信,组件变得更加通用。

   以下情况中,应该使用Mediator模式:

   对象集合需要以一个定义规范但复杂的方式进行通信。

   6、Memento模式

   保持对象状态的“快照”(snapshot),对象可以在不向外界公开其内容的情况下返回到它的最初状态。

   优点:

   保持封装的完整性。

   简化了返回到初始状态所需的操作。

   以下情况中,应该使用Memento模式:

   必须保存对象状态的快照,恢复状态。

   7、Observer模式

   定义了对象间一到多的依赖关系,当对象改变状态时,将自动通知并更新它所有的依赖对象。

   优点:

   抽象了主题与Observer之间的耦合关系。

   支持广播方式通信。

   以下情况中,应该使用Observer模式:

   对一个对象的修改涉及对其他对象的修改,而且不知道有多少对象需要进行相应修改。

   对象应该能够在不同假设对象标识的前提下通知其它对象。

   8、State模式

   对象在内部状态变化时,变更其行为,并且修改其类。

   优点:

   针对不同状态来划分行为,使状态转换显式进行。

   9、Strategy模式

   定义了一组能够用来表示可能行为集合的类。这些行为可以在应用程序中使用,来修改应用程序功能。

   优点:

   另一种子类化方法。

   在类自身中定义了每一个行为,减少了条件语句。

   更容易扩展模型。

   以下情况中,应该使用Strategy模式:

   许多相关类只是在行为方面有所区别。

   需要算法的不同变体。

   算法使用客户端未知的数据。

   10、TemplateMethod模式

   不重写方法的前提下允许子类重载部分方法的方法。

   将一些步骤由子类实现。

   优点:代码重用的基础技术。

   以下情况中,应该使用TemplateMethod模式:

   一次实现算法的不变部分,子类实现算法的可变行为。

   11、Visitor模式

   不改变操作元素的类的前提下定义一个新操作。

   优点:

   容易添加新操作。

   集中相关排除不相关操作。

   以下情况中,应该使用Visitor模式:

   包含许多具有不同接口的对象类,并且想要对这些依赖具体类的对象进行操作。

   定义对象结构的类很少被修改,但想要在此结构上定义新的操作。

     希赛软考网,拥有十四年软考培训经验,希赛网一直坚持自主研发,将丰富的软考培训经验有效融入教程研发过程,自成体系的软考在线题库软考历年真题)、软考培训教材软考视频教程,多样的培训方式包括在线辅导面授、和,使考生的学习更具系统性,辅导更具针对性。采用全程督学机制,,软考平均通过率在全国。

   相关推荐

   2016年希赛教材大放送 

   2015年软考系统架构设计师精选复习笔记 

   2015年下半年系统架构设计师考试试题分析与解答

   系统架构设计师视频教程(2015)

更多资料
更多课程
更多真题
温馨提示:因考试政策、内容不断变化与调整,本网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!

软考备考资料免费领取

去领取

!
咨询在线老师!