780 likes | 1.1k Views
《 软件设计与体系结构 》. 第七章: 软件体系结构风格与设计模式. 内容. 7.1 基本概念 7.2 软件体系结构描述语言 7.3 软件体系结构风格 7.4 设计模式. 基本概念. 软件设计模式: 广义定义:可解决一类软件问题并能重复使用的软件设计方案 狭义定义:设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。是在类和对象的层次描述的可重复使用的软件设计问题解决方案。. 基本概念. 软件体系结构风格:是在构件和连接子的层次所描述的可重复使用的软件设计问题解决方案。. 内容. 1.1 基本概念 1.2 软件体系结构描述语言
E N D
《软件设计与体系结构》 第七章:软件体系结构风格与设计模式
内容 7.1 基本概念 7.2 软件体系结构描述语言 7.3 软件体系结构风格 7.4 设计模式
基本概念 • 软件设计模式: • 广义定义:可解决一类软件问题并能重复使用的软件设计方案 • 狭义定义:设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。是在类和对象的层次描述的可重复使用的软件设计问题解决方案。
基本概念 • 软件体系结构风格:是在构件和连接子的层次所描述的可重复使用的软件设计问题解决方案。
内容 1.1 基本概念 1.2 软件体系结构描述语言 1.3 软件体系结构风格 1.4 设计模式
软件体系结构描述语言 • 软件体系结构描述语言 • Architectural Description Language,简称ADL • 是用来描述软件密集型系统的总体结构的语言 • 代表性的体系结构描述语言 • Wright • Rapide • Darwin • Unicon • ACME • ABC/ADL • XYZ/ADL • XADL
软件体系结构描述语言 • Wright ADL • 构件(Component) • 连接子(Connector) • 端口(Ports) • 构件规范(Component-spec) • 计算(Computation) • 配置(Configuration) • 角色(Roles) • 粘连(Glue) • 实例(Instances) • 联接(Attachments)
软件体系结构描述语言 • 一个图形化的体系结构描述语言GADL
软件体系结构描述语言 • 一个图形化的体系结构描述语言GADL • 例子
软件体系结构描述语言 • 一个图形化的体系结构描述语言GADL • 例子
软件体系结构描述语言 • 一个图形化的体系结构描述语言GADL • 例子
软件体系结构描述语言 • 一个图形化的体系结构描述语言GADL • 例子
内容 1.1 基本概念 1.2 软件体系结构描述语言 1.3 软件体系结构风格 1.4 设计模式
软件体系结构风格 • 管道/过滤器风格 • 层次风格 • 客户/服务器风格
(1)管道/过滤器风格 • 实例剖析: shell命令:“cat a.txt | wc -w | lpr”
(1)管道/过滤器风格 • 实例剖析: shell命令:“cat a.txt | wc -w | lpr”
(1)管道/过滤器风格 • 实例剖析: shell命令:“cat a.txt | wc -w | lpr”
(1)管道/过滤器风格 • 实例剖析: shell命令:“cat a.txt | wc -w | lpr”
(1)管道/过滤器风格 • 实例剖析: “cat a.txt | grep -o soft | wc -w | lpr”
(1)管道/过滤器风格 • 特征:系统中构件之间通过数据流松散耦合。也就是说,构件之间的依赖仅仅是数据流,而不是通常的接口函数调用或消息传递。 • 其他典型应用:编译器、信号处理等。 • 其他说明:本模式在实现上可以有许多不同的变化,如主动与被动、多出口管道等。
(2)层次风格 • 实例剖析:数据库系统
(2)层次风格 • 特征:从向外提供服务的构件出发,沿着连接关系递次搜索各构件和连接子,如果形成的拓扑结构是一个有向无圈图(典型情况下是一个线性结构),那么这个系统的体系结构风格就是层次式的。 • 这种设计风格便于将复杂的系统进行分解;同时也便于构件替换:只要保持接口一致,就可以将某一层的软件替换掉,而不会影响到系统的其他部分。
(2)层次风格 • 其他典型应用:开放系统互联(OSI)七层网络模型、Windows NT操作系统的内核结构。
(2)层次风格 • 其他说明: • 优点是结构清晰、可替换性好、便于控制复杂性; • 但也有它的缺点,如效率低:分层结构中高层的数据要经过层层传递和转发,从而降低系统效率。
(3)客户/服务器风格 • 实例剖析:FTP系统
(3)客户/服务器风格 • 特征:从向外提供服务的构件出发,沿着连接关系递次搜索各构件和连接子,如果形成的拓扑结构是一棵倒置的树,那么这个系统的体系结构就是客户/服务器风格的。 • 这种风格使得服务功能的实现很集中,便于系统实现,因而得到广泛使用。
(3)客户/服务器风格 • 其他典型应用:电子邮件系统、WWW系统、TELNET系统、CVS版本控制系统等
(3)客户/服务器风格 • 其他说明:在客户/服务器风格的系统中,服务器是资源和计算的集中地,因此容易成为存储和计算瓶颈,实际应用中为了提高服务器的性能,可能要采用集群处理等办法。同时,这个特点也使得这类系统容易遭受拒绝服务(Deny Of Service)攻击,因此在设计和应用中要作针对性考虑。 • 此外,在这种风格的系统中,服务器中往往要存储更多客户的状态信息,因此大量使用并发执行技术,如多进程、多线程等,这也就涉及到进程、线程的动态创建、调度、删除等问题。这些问题处理得好坏直接影响到服务器的性能。
内容 1.1 基本概念 1.2 软件体系结构描述语言 1.3 软件体系结构风格 1.4 设计模式
设计模式 • 文献[7-2]中描述了23个设计模式,并将它们分为三种类型:创建型设计模式、结构型设计模式和行为型设计模式。
设计模式 • Factory Method • Abstract Factory • Singleton • Composite • Proxy • Iterator • Observer
(1) Factory Method • 动机与实例:“龙珠”游戏
(1) Factory Method • 动机与实例:“龙珠”游戏 • 设计1 ?
(1) Factory Method • 动机与实例:“龙珠”游戏 • 设计2
(1) Factory Method • 适用场合:有一些实体(各种魔力管道),它们的结构和行为是相似的,且都包含一些相似的更小实体(各类球),但一个大实体内部的这些小实体都是同一类的(一种魔力管道内只有一种球)。此时,如果各类小实体的描述构成一个类层次,那么可使用Factory Method模式,将各类大实体也描述为一个类层次。
(1) Factory Method • 结构:
(1) Factory Method • 核心思想归纳:在父类中,将创建对象的操作包装为一个虚函数,在描述公共行为的过程中调用该函数;在子类中重定义该虚函数来定制创建的对象,从而间接定制公共行为。利用虚函数的多态机制,Factory Method模式使得父类可集中描述公共行为,而将特别行为(不同对象的创建)抽放于子类。
(2) Abstract Factory • 动机与实例:魔力管道。在前面的设计中,三个MakeBallFactoryMethod工厂方法散放在三个MagicPipe类中。为了降低复杂性,可以把所有的创建动作拆分出来单独考虑。
(2) Abstract Factory • 动机与实例:设计3
(2) Abstract Factory • 动机与实例:设计4
(2) Abstract Factory • 动机与实例:设计5
(2) Abstract Factory • 适用场合:当需要创建一组多种风格的小实体、且具体创建方式又要灵活可调整时,可使用Abstract Factory模式,将公共的创建行为描述为一个抽象类,而将具体的创建方式用该抽象类的子类来描述。
(2) Abstract Factory • 结构:
(2) Abstract Factory • 核心思想归纳:为了提供灵活性,将需要创建的同一风格的一组小实体的一般特征提取出来,用一组抽象产品类来描述,同时将创建行为封装为一个抽象工厂类,提供通用的创建接口,而将各种具体的产品和具体的创建行为用抽象产品类和抽象工厂类的子类来描述。从而使得BigEntity和具体的产品特性和具体的创建行为隔离开来,既降低了耦合度,也使得灵活调整创建行为成为可能。
(3) Singleton • 动机与实例:日志功能,在一个应用程序内部一般只需要一个日志实例即可。 • 实现方案1
(3) Singleton • 动机与实例:日志功能,在一个应用程序内部一般只需要一个日志实例即可。 • 实现方案1
(3) Singleton • 动机与实例:日志功能,在一个应用程序内部一般只需要一个日志实例即可。 • 实现方案1