【软件体系结构】软件体系结构风格
软件体系结构风格
文章目录
- 软件体系结构风格
- 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.
【软件体系结构】软件体系结构风格相关推荐
- 【软件体系结构】架构风格与基于网络应用软件的架构设计:Roy Tomas Fielding】
[软件体系结构]架构风格与基于网络应用软件的架构设计:Roy Tomas Fielding 博士 - 唐雕 - 博客园
- 软件设计与体系结构简答题汇总
假设系统中有三个类,分别为类 A .类 B 和类 C .在现有的设计中,让类 A 直接依赖类 B ,如果要将类 A 改为依赖类 C ,必须通过修改类 A 的代码来达成,请问这样的设计符合开闭原则吗( ...
- 软件设计与体系结构思维导图
软件设计与体系结构思维导图 第一章 软件工程与软件设计 第二章 统一建模语言UML 目录版 详细版 第三章 软件设计基础 目录版 详细版 第四章 面向对象的软件设计方法 目录版 详细版 第六章 用户界 ...
- 软件设计模式与体系结构(中)
目录 软件体系结构概述 一.软件体系结构的定义 二.软件体系结构的优势 经典软件体系结构 一.调用-返回风格软件体系结构 1.主程序-子程序 2.面向对象 二.数据流风格软件体系结构 1.顺序批处理软 ...
- 汇编程序设计与计算机体系结构软件工程师教程笔记:内联汇编与宏
<汇编程序设计与计算机体系结构: 软件工程师教程>这本书是由Brain R.Hall和Kevin J.Slonka著,由爱飞翔译.中文版是2019年出版的.个人感觉这本书真不错,书中介绍了 ...
- 汇编程序设计与计算机体系结构软件工程师教程笔记:函数、字符串、浮点运算
<汇编程序设计与计算机体系结构: 软件工程师教程>这本书是由Brain R.Hall和Kevin J.Slonka著,由爱飞翔译.中文版是2019年出版的.个人感觉这本书真不错,书中介绍了 ...
- 汇编程序设计与计算机体系结构软件工程师教程笔记:指令
<汇编程序设计与计算机体系结构: 软件工程师教程>这本书是由Brain R.Hall和Kevin J.Slonka著,由爱飞翔译.中文版是2019年出版的.个人感觉这本书真不错,书中介绍了 ...
- 汇编程序设计与计算机体系结构软件工程师教程笔记:处理器、寄存器简介
<汇编程序设计与计算机体系结构: 软件工程师教程>这本书是由Brain R.Hall和Kevin J.Slonka著,由爱飞翔译.中文版是2019年出版的.个人感觉这本书真不错,书中介绍了 ...
- 汇编程序设计与计算机体系结构软件工程师教程笔记:总结
<汇编程序设计与计算机体系结构: 软件工程师教程>这本书是由Brain R.Hall和Kevin J.Slonka著,由爱飞翔译.中文版是2019年出版的.个人感觉这本书真不错,书中介绍了 ...
- 软件设计与体系结构第二版董威_董威-软件设计与体系结构(第2版)-PPT课件.zip-3-4-形式化方法.ppt...
董威-软件设计与体系结构(第2版)-PPT课件.zip-3-4-形式化方法.ppt (1009.5 KB) 下载风险提示 若需要下载,请务必先预览(下载的文件和预览的文件一致) 由于本站上传量巨大,来 ...
最新文章
- HTTPS和HTTPS证书
- 最少步数----深搜
- Shell中case判断结构的用法笔记
- mysql服务器默认操作字符集,如何在mysql中找到默认服务器字符集?
- 面向对象编程已死,OOP 永存!
- LNMP环境下搭建wordpress
- Linux配置本地端口映射
- Win7安装IE10或IE11 离线安装注意问题
- linux命令mysql启动,linux下启动mysql的命令
- vscode 显示/设置隐藏文件夹
- 15块rmb做一个语音识别控制的0.3W白光LED便利USB灯
- java业务场景-实现订单超时关闭等延时队列操作的几种方式
- 计算机课程给你最大的收获,计算机课程心得体会.doc
- BZOJ4987 Tree
- 【BZOJ1135】[POI2009]Lyz 线段树
- 利用callKit实现电话防骚扰
- 【Language model】使用RNN LSTM训练语言模型 写出45°角仰望星空的文章
- 低轨卫星J2模型数值外推精度竟然接近STK的HPOP高精度外推模型
- 更新vetur和vscode版本后,vetur失效,代码全白
- 攻防世界WEB练习-easyupload