软件体系结构风格

文章目录

  • 软件体系结构风格
    • 1.软件体系结构定义
    • 2.常见软件体系结构风格
      • 2.1管道和过滤器
      • 2.2数据抽象和面向对象组织
      • 2.3基于事件的隐式调用
      • 2.4分层系统
      • 2.5仓库系统
      • 2.6C/S风格
      • 2.7B/S风格
    • 3.总结

  软件体系结构的学习第二篇,软件体系结构风格。

1.软件体系结构定义

  软件体系结构的定义:某一特定软件领域的系统组织方式的惯用方式。通俗来讲就是某一类软件的体系结构的特性抽象,它还是由3C构成(Component,Connector,Constraint)。软件体系结构与不同的软件体系结构风格的关系就好比人与黄种人,白种人,黄种人的关系。

2.常见软件体系结构风格

  下文的每个软件体系结构风格会从Component,Connector来讲述,一些会附有例子辅助理解。

2.1管道和过滤器

构件:过滤器,输入一组数据,经过处理,并输出一组数据。(IPO)

连接件:管道,将一个构件的输出作为另一个构件的输入。

e.g Linux的管道命令,编译器,Java8特性Stream

2.2数据抽象和面向对象组织

构件:对象

连接件:函数或过程(通过它们实现对象的交互)

2.3基于事件的隐式调用

构件分为两种,事件源( Event Source)和事件处理器(Event Handler)。

连接件为注册。

这个软件体系结构风格与观察者模式相关,事件源就是观察目标,事件处理器就是观察者。将观察者注册到观察目标中的注册对应的就是连接件。所谓隐式调用指的就是事件源和事件处理器是独立的两个构件,事件源并不知道当它触发时,事件处理器会作何反应。

e.g 数据库管理系统和用户界面。

场景模拟:

点击按钮,画面随机变色,按钮的内容变为颜色对应的rgb参数。

测试代码:

package com.lordbao.practice;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;/*** @Author Lord_Bao* @Date 2020/10/12 18:38* @Version 1.0*/
public class TestImplicitCallBasedOnEvent {public static void main(String[] args) {new MyFrame();}
}class  MyFrame extends JFrame{//面板容器,用于添加组件private JPanel panel;public  MyFrame(){//面板容器,用于添加组件panel = new JPanel();JButton button = new JButton("Button");panel.add(button);//设置框体起始位置和大小this.setBounds(200,200,400,400);//设置点击关闭按钮,默认程序终止this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.add(panel);this.setVisible(true);/**  核心代码*   注册 :将观察者注册到观察目标里去**   注册即为连接件*   观察者即ChangePaneColorListener  就是事件处理构件*   观察目标即  Button               就是事件源控件**   所谓隐式就是事件源构件并不知道当它触发时,事件处理构件会作何处理。*   只有当事件触发时,才会知道事件处理构件如何处理。*/button.addActionListener(new ChangePaneColorListener());}//内部类private class ChangePaneColorListener  implements ActionListener{/*** 事件处理构件的处理*/@Overridepublic void actionPerformed(ActionEvent e) {/***  给面板的背景产生一个随机的颜色*/Random random = new Random() ;int r = random.nextInt(256);int g=  random.nextInt(256);int b = random.nextInt(256);Color backgroundColor = new Color(r,g,b);panel.setBackground(backgroundColor);/*** 如果事件源(Event Source)是按钮* 那么该按钮的文本就设置为Color的种类*/if(e.getSource().getClass().equals(JButton.class)){JButton button = (JButton)e.getSource();button.setText(backgroundColor.toString());}}}
}

测试效果:

核心代码及分析:

/**  核心代码*   注册 :将观察者注册到观察目标里去**   注册即为连接件*   观察者即ChangePaneColorListener  就是事件处理构件*   观察目标即  Button               就是事件源控件**   所谓隐式就是事件源构件并不知道当它触发时,事件处理构件会作何处理。*   只有当事件触发时,才会知道事件处理构件如何处理。*/
button.addActionListener(new ChangePaneColorListener());

2.4分层系统

构件:各个层

连接件:层之间的调用

这样的分层系统的好处就是降低耦合,提高复用。

e.g MVC架构,OSI7层模型。

2.5仓库系统

构件:中央结构(数据库)和其他一些独立构件的集合

连接件:仓库和在系统中很重要的外部构件之间的相互作用

2.6C/S风格

C/S风格的是基于资源不对等,且为了资源共享而提出的,核心组成部分为Client(客户端),Server(服务端)和网络。显然,客户端和服务端为构件,网络即为连接件。

C/S风格整体来说可分为三类,如下图所示。

如图,不难发现,数据层是放在服务器上的,而表示层是放在客户机上的。功能层放在服务器还是客户机的一个效果就是减轻了另一方的压力。其中(2)是三层C/S风格的体现,它将数据层,功能层分别用不同的服务器来处理,目的也很明显,减轻压力,可以实现并行开发,但是这样构建成本也会有增高。

C/S架构的优点就是数据操作和事务处理很强,灵活性也比较高(服务器和客户机根据实际情况进行功能调整)

C/S架构的缺点就是跨平台能力差,需要针对不同操作系统进行开发,这样成本会提高,除此外更新繁琐不方便。

比如QQ领不到新版的红包,游戏需要更新补丁。

2.7B/S风格

  B/S即Browser和Server,它其实也是三层C/S风格的体现方式。如下图所示:

基于B/S体系结构的软件,系统安装、修改和维护全在服务器端解决,从而达到了一种“零客户端”的功能。

B/S很明显的优点就是跨操作系统,升级更加方便(刷新一下即可)。

B/S的缺点就是安全性以及响应速度都会低于C/S风格。

针对实际情况,采用不同的C/S或是B/S架构或是混合结构进行开发。

e.g1后台管理用C/S,前端展示用B/S。

e.g2公司内网用B/S,远程访问用C/S。

e.g3银行,监控,医疗用C/S.

3.总结

1.软件体系结构风格是某一类特定领域的软件体系结构的抽象总结,本质还是由3C构成,灵明石猴和六耳猕猴都是猴。

2.软件体系结构风格有个印象即可,当然基于事件的隐式调用和C/S和B/S着重理解。

  • 基于事件的隐式调用:所谓隐式指的是事件源并不知道当它触发时,事件处理器会作何反应。这里和观察者模式挂钩。
  • C/S分为三类:2层的优点是易于理解,3层的优点是便于并行开发,但会增加成本,通信效率会降低。整个C/S的优点是安全和灵活,缺点是跨平台导致成本高,升级维护麻烦。
  • B/S是C/S的一个特例,它是三层C/S的一个体现,它将软件的升级,维护,数据处理全部都放在服务端。它的优点是升级方便,跨操作系统。缺点就是安全和响应速度会低于C/S.

【软件体系结构】软件体系结构风格相关推荐

  1. 【软件体系结构】架构风格与基于网络应用软件的架构设计:Roy Tomas Fielding】

    [软件体系结构]架构风格与基于网络应用软件的架构设计:Roy Tomas Fielding 博士 - 唐雕 - 博客园

  2. 软件设计与体系结构简答题汇总

    假设系统中有三个类,分别为类 A .类 B 和类 C .在现有的设计中,让类 A 直接依赖类 B ,如果要将类 A 改为依赖类 C ,必须通过修改类 A 的代码来达成,请问这样的设计符合开闭原则吗( ...

  3. 软件设计与体系结构思维导图

    软件设计与体系结构思维导图 第一章 软件工程与软件设计 第二章 统一建模语言UML 目录版 详细版 第三章 软件设计基础 目录版 详细版 第四章 面向对象的软件设计方法 目录版 详细版 第六章 用户界 ...

  4. 软件设计模式与体系结构(中)

    目录 软件体系结构概述 一.软件体系结构的定义 二.软件体系结构的优势 经典软件体系结构 一.调用-返回风格软件体系结构 1.主程序-子程序 2.面向对象 二.数据流风格软件体系结构 1.顺序批处理软 ...

  5. 汇编程序设计与计算机体系结构软件工程师教程笔记:内联汇编与宏

    <汇编程序设计与计算机体系结构: 软件工程师教程>这本书是由Brain R.Hall和Kevin J.Slonka著,由爱飞翔译.中文版是2019年出版的.个人感觉这本书真不错,书中介绍了 ...

  6. 汇编程序设计与计算机体系结构软件工程师教程笔记:函数、字符串、浮点运算

    <汇编程序设计与计算机体系结构: 软件工程师教程>这本书是由Brain R.Hall和Kevin J.Slonka著,由爱飞翔译.中文版是2019年出版的.个人感觉这本书真不错,书中介绍了 ...

  7. 汇编程序设计与计算机体系结构软件工程师教程笔记:指令

    <汇编程序设计与计算机体系结构: 软件工程师教程>这本书是由Brain R.Hall和Kevin J.Slonka著,由爱飞翔译.中文版是2019年出版的.个人感觉这本书真不错,书中介绍了 ...

  8. 汇编程序设计与计算机体系结构软件工程师教程笔记:处理器、寄存器简介

    <汇编程序设计与计算机体系结构: 软件工程师教程>这本书是由Brain R.Hall和Kevin J.Slonka著,由爱飞翔译.中文版是2019年出版的.个人感觉这本书真不错,书中介绍了 ...

  9. 汇编程序设计与计算机体系结构软件工程师教程笔记:总结

    <汇编程序设计与计算机体系结构: 软件工程师教程>这本书是由Brain R.Hall和Kevin J.Slonka著,由爱飞翔译.中文版是2019年出版的.个人感觉这本书真不错,书中介绍了 ...

  10. 软件设计与体系结构第二版董威_董威-软件设计与体系结构(第2版)-PPT课件.zip-3-4-形式化方法.ppt...

    董威-软件设计与体系结构(第2版)-PPT课件.zip-3-4-形式化方法.ppt (1009.5 KB) 下载风险提示 若需要下载,请务必先预览(下载的文件和预览的文件一致) 由于本站上传量巨大,来 ...

最新文章

  1. HTTPS和HTTPS证书
  2. 最少步数----深搜
  3. Shell中case判断结构的用法笔记
  4. mysql服务器默认操作字符集,如何在mysql中找到默认服务器字符集?
  5. 面向对象编程已死,OOP 永存!
  6. LNMP环境下搭建wordpress
  7. Linux配置本地端口映射
  8. Win7安装IE10或IE11 离线安装注意问题
  9. linux命令mysql启动,linux下启动mysql的命令
  10. vscode 显示/设置隐藏文件夹
  11. 15块rmb做一个语音识别控制的0.3W白光LED便利USB灯
  12. java业务场景-实现订单超时关闭等延时队列操作的几种方式
  13. 计算机课程给你最大的收获,计算机课程心得体会.doc
  14. BZOJ4987 Tree
  15. 【BZOJ1135】[POI2009]Lyz 线段树
  16. 利用callKit实现电话防骚扰
  17. 【Language model】使用RNN LSTM训练语言模型 写出45°角仰望星空的文章
  18. 低轨卫星J2模型数值外推精度竟然接近STK的HPOP高精度外推模型
  19. 更新vetur和vscode版本后,vetur失效,代码全白
  20. 攻防世界WEB练习-easyupload

热门文章

  1. C++中i++和++i的区别
  2. 什么是干接点、湿接点、源型、漏型、NPN、PNP
  3. excel导入的数据中文字段转英文
  4. 【python】蔡勒公式计算日期
  5. oracle awr报告提取,Oracle AWR报告提取方法
  6. Centos系统安装踩坑
  7. 华为路由与交换 eSight 基本功能学习笔记
  8. 超低成本的2.4G超远距离无线遥控、无线传输方案随笔
  9. MRP专题二:计划策略(MTO)
  10. Linux之rz和sz命令用法详解