[软件工程]五. 体系结构设计(Architectural Design)

5.0.设计模式的六大原则

对扩展开放,对修改关闭。

5.1什么是体系结构设计

体系结构设计是软件设计的第一个阶段,是需求工程和软件设计工程之间的关键衔接环节。它会确定组成一个系统的主要结构构件以及它们之间的关系。

97e1d14a3a8041aa903c92a9288a909b.png

5.2一个简单的体系结构设计图

420e031f9557417eafba080535a08c34.png

这个体系结构模型显示了这些构件以及它们之间的联系。

5.3构件

1)怎么理解构件

  1. 在软件工程中,构件(Component)通常指的是软件系统中的一个独立的、可替换的、可复用的软件单元(在某些情况下也是可以包含硬件单元的)。这些构件可以是独立的软件模块,如类、对象、服务等,它们可以实现特定的功能或服务。然而,在某些情况下,构件也可能包括硬件部分,特别是当软件和硬件紧密集成时,如嵌入式系统或物联网设备。
  2. 在软件体系结构中,构件(Component)可以被理解为满足功能性需求的代码单元,这些单元可以是类(class)、函数(function)、模块(module)或其他可复用的代码块。构件是软件系统中可独立部署和替换的最小单位,它们通过定义良好的接口与其他构件交互。

 

2)粗粒度和细粒度构件的长处和短处

使用粗粒度构件(Coarse-grained components)通常可以提高软件构件间的通信效率,但确实可能对系统的可维护性产生一定的影响。

而细粒度构件易于提高系统的可维护性,但是会降低构件之间的通信速率。

5.4体系结构设计关注什么

体系结构设计关注软件系统是如何组织的,以及设计该系统的整体结构。设计往往会决定整个软件的质量。

5.5体系结构的重要性

  1. 软件的体系结构很重要,因为它往往会决定一个系统的性能,健壮性,分布性和可维护性。
  2. 重构体系结构往往成本很高(refactor the architecture is always expensive)

5.6对体系结构影响最大的需求

单个构件实现了功能性需求,但是对体系结构影响最大的是非功能性需求,非功能性需求的影响往往是跨整个体系的。

5.7设计软件体系结构的好处

  1. 利益相关者的交流:体系结构是一种可以作为许多不同利益相关者讨论的焦点的系统的高层表示。
  2. 系统分析:在系统的开发中,明确体系结构的要求,对系统的性能,健壮性,可分布性,可维护性等有深远影响。
  3. 大范围复用:好的体系结构对于有着相似需求的系统的构件或者结构复用有重要作用。

5.8体系结构设计决策

f45ac4e664054c238cca822fa9666358.png

5.9人们关注的质量特性

1)性能(performance)

1>性能(performance)的定义

性能(Performance)指的是软件系统在执行其功能时的效率和响应速度。

2>几个优化性能的设计方法

  1. 将关键性操作局部化到少量构件中

 

例子:假设我们正在开发一个在线购物平台,其中商品搜索功能是用户使用最频繁的操作之一。为了优化性能,我们可以将商品搜索逻辑(如数据库查询、索引构建等)集中在搜索服务这一单一构件中。这样,搜索服务可以针对搜索操作进行优化,比如使用高效的索引技术来快速响应用户查询,从而提高整个平台的搜索性能。

 

  1. 尽量让这些构件部署到同一台计算机上而不是分布在网络上(网络服务器的切换需要时间,我们把常用的功能都放在同一个服务器上)

 

例子:在同一个在线购物平台中,如果用户经常需要查看商品详情和购物车内容,我们可以将商品详情服务和购物车服务部署在同一台服务器上(网络服务器的通信需要时间)。这样,用户在浏览商品详情时,可以快速地从同一台服务器获取购物车信息,减少了网络延迟和数据传输时间,从而提高了用户体验。

 

  1. 在使用构件的时候,尽可能用一些大粒度的构件而不是小粒度的构件(使用大粒度的构件可以减少构件之间的通信量)

 

例子:在开发一个企业资源规划(ERP)系统时,我们可以将订单处理和库存管理这两个功能合并为一个大粒度的订单管理服务。这样,当用户提交订单时,订单管理服务可以一次性处理订单创建、库存更新等操作,减少了服务之间的通信次数,从而提高了订单处理的效率和系统的整体性能。

3>举出性能的几个方面

1.响应时间:用户执行操作后系统给出响应的时间。例如,用户点击按钮后页面加载的时间。

2.吞吐量:系统在单位时间内能够处理的事务数量。例如,每秒可以处理多少个订单。

3.资源利用率:系统运行时对CPU、内存、磁盘和网络等资源的使用情况。例如,CPU使用率、内存占用率等。

4.并发用户数:系统能够同时支持的用户数量。例如,系统能够支持多少用户同时在线。

5.稳定性:系统长时间运行时的稳定性和可靠性。例如,系统是否能够持续稳定运行,不会频繁出现故障。

6.可扩展性:系统在增加用户或数据量时,性能下降的程度。例如,系统是否能够通过增加硬件资源来应对用户量的增加。

7.延迟:数据在网络上传输时从发送到接收所需的时间。例如,数据包从客户端发送到服务器再返回客户端的时间。

8.带宽:系统在单位时间内能够传输的数据量。例如,网络连接的最大数据传输速率。

9.启动时间:系统从启动到完全可用所需的时间。例如,操作系统或应用程序启动并加载所有必要组件的时间。

10.处理速度:系统处理数据或执行任务的速度。例如,数据库查询的执行时间。

11.内存管理:系统管理内存资源的效率。例如,内存泄漏的检测和修复。

12.缓存效率:系统使用缓存来提高数据访问速度的能力。例如,缓存命中率和缓存大小。

13.数据库性能:数据库系统处理查询和事务的速度。例如,数据库查询的响应时间和事务的处理速度。

14.I/O操作:系统进行输入输出操作的效率。例如,磁盘读写速度和网络I/O性能。

15.可维护性:系统维护的难易程度,包括升级、修复和优化的容易程度。

 

2)信息安全

如果信息安全是关键性需求,那么就要用层次化的体系结构,把最关键的资产放在最内层进行保护

3)安全性

如果安全性是关键性要求,那么体系结构设计就应该让安全性相关的操作集中在单个构件或者少量构件中。这样可以减少安全性确认的成本和问题,并且可以使得提供的相关保护成为可能,这些保护系统在失效的时候可以安全地关闭系统。(比如:系统受到了hecker攻击,游戏外挂)

4)可用性

如果可用性是关键性需求,那么体系结构设计应当使用包含冗余的构件以便于在不停止系统的情况下可以更换或者更新构件。

5)可维护性

如果可维护性是关键性需求,那么系统体系结构设计应当使用容易改变的细粒度,自包含的构件,应将数据的生产者和数据的消费者相分离,同时避免共享的数据结构。

5.10体系结构视图

1)什么是体系结构视图

体系结构视图(Architecture View)是软件体系结构描述的一部分,它从特定的视角或关注点出发,展示系统的一个方面或一组相关方面。体系结构视图有助于理解、分析和沟通软件系统的复杂性。在软件工程中,体系结构视图通常用于描述系统如何满足特定的利益相关者的需求,例如用户、开发者、测试人员等。

2)体系结构视图图形表示

0da4fe8eca834ecfbb00056a1af15de1.png

3)体系结构视图的组成

  1. 逻辑视图(logical view):这个视图会将系统中的关键抽象显示为对象或者对象类。应该将系统需求和这个逻辑视图中的实体联系起来。
  2. 进程视图(process view):这个视图显示系统在运行时如何通过相互交互的进程来构成。该视图对于做出关于非功能性系统特征的判断很有效
  3. 开发视图(development view):这个视图会显示软件如何面向开发任务进行分解。也就是说,该视图显示了软件如何分解为由单个开发者或开发团队实现的构件。(任务分配)
  4. 物理视图(physical view):这个视图显示系统硬件以及软件构件如何分布在系统的处理器上。该视图对于规划系统部署方案的系统工程师很有用。

5.11体系结构模式(Architectural patterns)

1)什么是体系结构模式

体系结构模式(Architecture Patterns)是软件工程中用于解决特定问题的通用解决方案模板。这些模式描述了在特定上下文中,如何组织软件系统中的组件、它们之间的关系以及如何进行交互。体系结构模式为软件设计提供了一种结构化的方法,帮助开发团队构建出既可靠又可维护的系统。

2)一个MVC模式的例子来理解体系结构模式

模型(Model)

模型代表应用程序的数据和业务逻辑。它负责数据的存储和检索,以及处理业务规则和逻辑。在MVC模式中,模型不依赖于视图和控制器,这意味着模型可以独立于用户界面进行测试和重用。

视图(View)

视图是用户界面的一部分,负责展示数据给用户。它从模型中获取数据,并以用户友好的方式展示。在MVC模式中,视图通常不包含任何业务逻辑,只负责显示数据和接收用户输入。

控制器(Controller)

控制器是模型和视图之间的中介。它接收用户输入,然后调用模型来处理数据,并选择合适的视图来显示结果。控制器负责协调模型和视图之间的交互。

例子:在线购物网站

假设我们正在开发一个在线购物网站,我们可以使用MVC模式来组织我们的代码。

  • 模型(Model:代表商品信息的数据结构,以及处理商品添加到购物车、结账等业务逻辑的类。
  • 视图(View:展示商品列表、购物车内容和结账页面的HTML模板。
  • 控制器(Controller:处理用户请求(如点击“添加到购物车”按钮),更新模型(如将商品添加到购物车),然后选择相应的视图(如更新购物车页面)。

通过MVC模式,我们可以清晰地分离数据处理、用户界面和用户交互逻辑,使得每个部分都可以独立开发和测试。例如,设计师可以专注于视图的开发,而开发人员可以专注于模型和控制器的实现。此外,如果需要修改用户界面或业务逻辑,我们只需要修改相应的视图或模型,而不需要改动其他部分,这大大提高了系统的可维护性和可扩展性。

3)MVC模式(Model-View-Controller)

1>什么是MVC模式

MVC模式(Model-View-Controller)是一种软件设计模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式旨在实现关注点分离,使得应用程序的业务逻辑、数据和用户界面可以独立开发和维护。

2>MVC模式包含什么

模型(Model)

模型代表应用程序的数据和业务逻辑。它负责数据的存储和检索,以及处理业务规则和逻辑。在MVC模式中,模型不依赖于视图和控制器,这意味着模型可以独立于用户界面进行测试和重用。

视图(View)

视图是用户界面的一部分,负责展示数据给用户。它从模型中获取数据,并以用户友好的方式展示。在MVC模式中,视图通常不包含任何业务逻辑,只负责显示数据和接收用户输入。

控制器(Controller)

控制器是模型和视图之间的中介。它接收用户输入,然后调用模型来处理数据,并选择合适的视图来显示结果。控制器负责协调模型和视图之间的交互。

3>MVC模式的图形化表示

8033c8e2f2ab4c54bf534db3da3b2b3e.png

 

4)   分层体系结构模式(Layered Model)

1>什么是分层体系结构模式

分层体系结构模式(Layered Architecture Pattern)是一种软件设计模式,它将软件系统划分为多个层次(或层),每一层负责系统中特定的职责。这种模式通过将系统分解为多个层次,实现了关注点分离,使得系统更易于理解和维护。分层体系结构模式是软件开发中非常常见的一种模式,尤其在企业级应用和大型系统中。

2>分层体系结构模式的图形化表示

53bf8f74039c4893b53f35e657212d29.png

3>一个通用的分层体系结构

ce1f618710894cd1b5b96ae967297a2c.png

4>分层体系结构模式的优点

只要保证接口不变,允许对整个层进行替换。可以在每个层次上提供冗余的设施(例如:身份认证)以增加系统的可靠性。

5>分层体系结构模式的缺点

在实践中,很难将各层之间干净地分离,在较高层次上的层可能不得不与较低层次的层进行直接交互,而不是通过紧邻着的下一层。

6>什么时候使用分层体系结构模型

  1. 当在已有系统之上构件新的设施时使用
  2. 当开发设计多个团队,每个团队负责一个层次上的功能时使用。
  3. 当存在多个层次上的信息安全需求时使用

5)知识库体系结构模式(Repository Architectural Model)

1>什么是知识库体系结构模式

知识库体系结构模式(Repository Architectural Model)是一种软件架构模式,它专门用于构建和管理知识库系统。知识库系统是一种用于存储、组织和检索知识的系统,它通常用于支持决策支持、专家系统、自然语言处理和人工智能应用等领域。知识库体系结构模式旨在提供一个框架,以有效地存储、检索和管理知识。

2>一个知识库体系结构模式的例子图形

b8e9e28c05d24b6a9e3d64f021baba8e.png

3>知识库体系结构模式的优点

构件可以保持独立,它们不需要知道其他构件的存在,一个构件进行的修改可以被传播到所有构件中。所有的数据都可以一致性地进行管理,因为这些数据都存放在同一个地方。

4>知识库体系结构模式的缺点

知识库可能会存在单点失效的问题,因此知识库中的问题会影响到整个系统

5>什么时候使用知识库体系结构模式

当系统生成大量需要长时间保存的信息的时候应该使用这个模式。还可以在数据驱动的系统中使用,这类系统的知识库在新增数据的时候会触发一个动作或者工具。

6>MVC,layered,repository model之间的区别

 

ebefb38f083447d4ae92086387a3464b.png

6)客户-服务器体系结构(The Client-Server Pattern)

1>什么是客户-服务器体系结构

知识库体系结构描述了一种静态结构,没有显示系统的运行时组织。而SC Model则描述了一种常见的分布式运行时的组织方式。一个遵循客户-服务器模式的系统被组织为 一组服务和相关联的服务器,以及访问并使用服务的客户端。

在这种模式中,系统被分为两个主要部分:客户端(Client)和服务器(Server)。客户端是请求服务的实体,而服务器是提供服务的实体。这种模式通过网络将客户端和服务器连接起来,使得客户端可以请求服务器上的资源和服务。

fe8054397f7442249d162ffa11206596.png

09c5eed7371340359517ad04ebcfd367.png

2>一个CS Pattern的图形化例子

d3db147b33f64968918c3e49c173eaa0.png

3>客户-服务器体系结构模式的优点

这种模型的主要优点是服务器可以分布在网络上。通用的功能可以对所有的客户端开放并使用,不需要由所有服务实现(如果每个客户端都实现相同的功能,那么这些功能的代码会在每个客户端上重复,导致资源浪费。通过在服务器端集中实现这些功能,可以减少代码重复,优化资源使用。)。

服务器中的构件是可以分开的,只需要把客户端的申请分配到相应的构件模块进行处理就可以了,这样可以避免冗余。

ceba442cf5aa4d1488a313144ece5683.png

 

4>客户服务器体系结构模式的缺点

  1. 每个服务都存在单点失效的问题,因此容易受到拒绝服务攻击或者服务器失效的影响

(单点失效问题(Single Point of Failure,简称SPOF)是指在系统中存在一个组件或环节,如果该组件或环节发生故障,将导致整个系统或服务无法正常工作。)

 

例子:假设有一个在线银行系统,它使用客户-服务器体系结构。如果银行的中央服务器发生故障,那么所有客户端(如银行的网站、移动应用等)都将无法访问银行服务,包括查看账户余额、转账等。这种情况下,即使银行的其他系统(如分行的计算机系统)正常运行,用户也无法进行在线交易,因为所有交易都依赖于中央服务器。

 

  1. 性能可能不可预测,因为这取决于网络以及系统。

 

例子:考虑一个在线视频流媒体服务,它使用客户-服务器体系结构。如果大量用户同时尝试观看同一热门视频,服务器可能会因为处理大量请求而过载。这可能导致视频播放延迟、缓冲或中断,影响用户体验。此外,如果网络连接不稳定或速度慢,即使服务器处理能力足够,用户也可能遇到视频播放问题。

 

  1. 如果服务器属于不同的组织,那么还会出现管理问题。

 

例子:假设一个跨国公司使用客户-服务器体系结构来管理其全球业务。如果服务器位于不同国家,那么每个国家的服务器可能需要遵守不同的法律和监管要求。这可能导致合规性问题,因为公司需要确保每个国家的服务器都符合当地的法律和数据保护规定。此外,不同国家的服务器可能需要不同的技术支持和维护团队,这增加了管理的复杂性和成本。

7)BC (Broker-Client) Pattern代理服务器体系结构模式

Broker-Client (BC) 是一种分布式系统架构,其中中介者(Broker)作为客户端和服务器之间的中介,负责协调和管理客户端和服务器之间的交互。Broker可以提供额外的服务,如负载均衡、服务发现、消息传递等。

特点

  • 解耦合:Broker可以减少客户端和服务器之间的直接依赖。
  • 灵活性:Broker可以支持多种协议和接口,使得系统更加灵活。
  • 可扩展性:Broker可以管理多个服务,提高系统的可扩展性。
  • 容错性:Broker可以提供故障转移和恢复机制,提高系统的可靠性。

在实际的软件体系结构设计中,CS和BC可以结合使用,以实现更复杂的系统需求。例如,一个大型的分布式系统可能采用CS模型来管理客户端和服务器之间的通信,同时使用BC模型来实现服务之间的中介和协调。通过这种方式,可以结合两种架构的优点,构建出既高效又灵活的系统。

8)管道和过滤器体系结构模式(Pipe and Filter Architectural Pattern)

1>什么是管道和过滤器体系结构模式

系统中的数据处理通过组织,每个处理构件(过滤器)可以分离来执行一种数据转换。数据从一个构件流动到另一个构件中进行处理(就像在管道中流动一样)

ce76a5d3504d497cb9c1622fae19e311.png

2>一个Pipe and Filter Pattern的例子

7c75e000c24d4084ad48a90545817399.png

整个流程图通过一系列的椭圆形和矩形元素展示了从读取发货单到发出支付提醒的整个处理过程。每个步骤都是一个独立的过滤器,它们通过管道连接,数据(如发货单信息、支付状态等)在这些过滤器之间流动。这种结构使得每个步骤可以独立处理数据,提高了系统的灵活性和可维护性。同时,通过持续的收据发送和接收,确保了支付过程的透明度和操作的及时性。

3>一个简单的例子来理解管道-过滤器体系结构模式

例子:邮件处理系统

假设我们有一个邮件处理系统,它需要接收邮件、过滤垃圾邮件、进行病毒扫描、加密邮件内容、存储邮件到数据库,并最终将邮件发送给收件人。这个过程可以使用管道过滤器体系结构来实现。

过滤器(Filters):

1.接收邮件过滤器:负责接收来自外部的邮件,并将其放入处理流程。

2.垃圾邮件过滤器:检查邮件内容,判断是否为垃圾邮件。

3.病毒扫描过滤器:对邮件内容进行病毒扫描。

4.加密过滤器:对邮件内容进行加密处理。

5.存储过滤器:将邮件存储到数据库中。

6.发送过滤器:将邮件发送给收件人。

管道(Pipes):

  • 邮件数据管道:连接各个过滤器,确保邮件数据按照顺序通过每个过滤器。

流程:

1.接收邮件过滤器:邮件通过网络到达系统,被接收邮件过滤器捕获。

2.垃圾邮件过滤器:过滤器检查邮件内容,如果邮件被标记为垃圾邮件,则被丢弃;否则,邮件继续传递。

3.病毒扫描过滤器:对邮件内容进行扫描,如果发现病毒,则邮件被隔离;否则,邮件继续传递。

4.加密过滤器:对邮件内容进行加密,确保邮件在传输过程中的安全性。

5.存储过滤器:将加密后的邮件存储到数据库中,以便于检索和管理。

6.发送过滤器:从数据库中检索邮件,并将其发送给收件人。

在这个例子中,每个过滤器都是独立的,专注于执行特定的任务。邮件数据通过管道在过滤器之间流动,每个过滤器处理完数据后,将处理结果传递给下一个过滤器。这种结构使得系统易于扩展和维护,因为可以轻松地添加或修改过滤器来适应新的需求,而不会影响到整个系统的其他部分。

 

4>管道和过滤器体系结构模式的优点

  1. 容易理解并且支持变化的复用。这种工作流风格与许多业务过程的结构相匹配。
  2. 通过增加变换来演化是非常直观的。
  3. 可以被实现为一个顺序系统或者并发系统

5>管道和过滤器体系结构模式的缺点

  1. 针对数据转换的格式必须在相互通信的多个变换间达成一致。
  2. 每个变换必须解析它的输入,并将输出转换为所约定的形式,增加了系统的负担

同时意味着无法复用使用不兼容的数据结构和体系结构构件

6>通过例子来理解管道过滤器系统的优缺点

管道和过滤器体系结构模式的优点

例子:音乐编辑软件

想象一个音乐编辑软件,它允许用户将多个音频效果(如混响、均衡器、压缩器等)应用到音乐文件上。这个软件可以使用管道和过滤器体系结构来实现。

  • 容易理解并且支持变化的复用:用户可以将不同的音频效果(过滤器)以任意顺序(管道)串联起来,以达到他们想要的音乐效果。如果需要添加新的音频效果,只需添加一个新的过滤器即可,无需修改现有的过滤器。
  • 通过增加变换来演化非常直观:如果用户想要添加一个新效果,比如“回声”,他们只需创建一个新的“回声过滤器”,然后将其插入到现有的效果链中。
  • 可以被实现为一个顺序系统或者并发系统:如果系统资源允许,可以并行处理多个音频文件,每个文件通过自己的管道和过滤器链进行处理。

管道和过滤器体系结构模式的缺点

例子:数据转换系统

假设一个数据转换系统需要将CSV格式的数据转换为JSON格式,然后进行加密处理。

  • 针对数据转换的格式必须在相互通信的多个变换间达成一致:如果一个过滤器(如CSV解析器)输出的数据格式与下一个过滤器(如JSON转换器)期望的格式不匹配,那么整个数据流就会中断。
  • 每个变换必须解析它的输入,并将输出转换为所约定的形式,增加了系统的负担:在上述例子中,如果CSV解析器和JSON转换器需要处理大量数据,那么它们必须频繁地进行数据格式的解析和转换,这会增加系统的计算负担。
  • 无法复用使用不兼容的数据结构和体系结构构件:如果一个过滤器使用了特定的数据结构,而另一个过滤器需要不同的数据结构,那么这两个过滤器就无法直接连接。例如,如果一个过滤器需要处理XML格式的数据,而另一个过滤器只能处理JSON格式的数据,那么它们之间就需要一个额外的转换过滤器来桥接这两种格式。

 

7>什么时候使用管道和过滤器体系结构模式

在数据处理应用(无论是批处理还是基于事务)中得到了广泛的应用。这类应用中输入在多个分离的阶段中进行处理,并最终生成相关的输出。

    1. 什么是批处理

批处理(Batch Processing)是一种计算机处理方式,它允许将多个任务或作业(称为批)集中在一起,然后一次性提交给计算机系统进行处理。批处理系统通常用于执行不需要用户交互的任务,如数据处理、报表生成、文件转换等。批处理的主要目的是提高效率,减少等待时间,以及优化资源使用。

2》批处理的特点

  • 1.非交互式:用户提交任务后,不需要在计算机前等待结果,可以离开去做其他工作。
  • 2.自动化:一旦任务被提交到批处理系统,它会自动执行,直到完成。
  • 3.效率:批处理可以同时处理多个任务,提高计算机的利用率。
  • 4.调度:批处理系统通常包含任务调度器,用于决定任务的执行顺序和时间。
  • 5.资源管理:批处理系统可以优化资源分配,如CPU时间、内存和磁盘空间。

 

3》什么时候使用批处理

  • 数据处理:如财务报表的生成、库存管理系统的数据更新等。
  • 文件转换:如将文档从一种格式转换为另一种格式。
  • 科学计算:如天气预报模型的运行、物理模拟等。
  • 打印作业:如打印大量文档。

4》java线程池代码模拟批处理

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.TimeUnit;

 

public class BatchProcessingExample {

 

    public static void main(String[] args) {

        // 创建一个固定大小的线程池

        ExecutorService executorService = Executors.newFixedThreadPool(5);

 

        // 提交任务到线程池

        for (int i = 1; i <= 10; i++) {

            final int taskId = i;

            executorService.submit(() -> {

                // 模拟任务执行

                System.out.println("任务 " + taskId + " 开始执行");

                try {

                    // 模拟任务处理时间

                    Thread.sleep(1000);

                } catch (InterruptedException e) {

                    Thread.currentThread().interrupt();

                }

                System.out.println("任务 " + taskId + " 执行完成");

            });

        }

 

        // 关闭线程池

        executorService.shutdown();

        try {

            // 等待所有任务完成

            if (!executorService.awaitTermination(60, TimeUnit.SECONDS)) {

                executorService.shutdownNow();

            }

        } catch (InterruptedException e) {

            executorService.shutdownNow();

            Thread.currentThread().interrupt();

        }

    }

}

 

在这个例子中,我们创建了一个固定大小为5的线程池,然后提交了10个任务到线程池中执行。每个任务执行时,会打印出任务开始和完成的信息。shutdown()方法用于关闭线程池,awaitTermination()方法用于等待所有任务完成。

这个例子展示了如何在Java中模拟批处理任务的执行。在实际应用中,批处理任务可能涉及文件读写、数据库操作等,但基本的执行逻辑是类似的。通过使用线程池,可以有效地管理资源,提高任务执行的效率。

8>详细设计和体系结构设计

1》详细设计—>设计算法

详细设计阶段关注于软件的实现细节,包括算法的实现。在这个阶段,开发者会深入到软件的各个组件中,为每个组件设计具体的算法来实现其功能。这些算法是软件功能的具体实现方式,它们决定了软件如何处理数据、执行任务以及响应用户操作。

例如,如果一个软件需要对数据进行排序,详细设计阶段会涉及选择合适的排序算法(如快速排序、归并排序等),并为该算法编写具体的代码实现。

 

2》体系结构设计—>放置算法

体系结构设计阶段则关注于软件的整体结构和组织方式,包括确定软件的各个组件如何相互作用以及如何协同工作。在这个阶段,开发者会决定将哪些算法放置在哪些组件中,以及这些组件如何相互连接和交互。

例如,如果一个软件需要处理用户输入、数据处理和用户界面显示,体系结构设计阶段会决定将排序算法放在数据处理组件中,而用户界面组件则负责显示排序结果。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值