Layers 模式

分层模式是有助于将应用程序划分为多组子任务。每组子任务都有自己的抽象层。

最典型的应用是OSI的七层模型,每一层都有自己特定的任务。

 1 #include <iostream>
2
3 class L1Provider{
4 public:
5 virtual void L1Service() = 0;
6 };
7
8 class L2Provider{
9 public:
10 virtual void L2Service() = 0;
11 void setLowerLayer(L1Provider *l1){level1 = l1;}
12 protected:
13 L1Provider *level1;
14 };
15
16 class L3Provider{
17 public:
18 virtual void L3Service() = 0;
19 void setLowerLayer(L2Provider *l2){level2 = l2;}
20 protected:
21 L2Provider *level2;
22 };
23
24 class L2Parent{
25 public:
26 virtual void L2PServ() = 0;
27 };
28
29 class L1Parent{
30 public:
31 virtual void L1PServ() = 0;
32 void setParentLayer(L2Parent *l2){lParent2 = l2;}
33 protected:
34 L2Parent *lParent2;
35 };
36
37 class L1Peer{
38 public:
39 virtual void L1PPeer() = 0;
40 void setParentLayer(L1Parent *l1){lParent1 = l1;}
41 protected:
42 L1Parent *lParent1;
43 };
44
45 class DataLink : public L1Provider, public L1Peer{
46 public:
47 virtual void L1Service(){
48 std::cout << "L1Service doing job" << std::endl;
49 }
50 void L1PPeer(){
51 std::cout << "LpPPeer start" << std::endl;
52 lParent1->L1PServ();
53 std::cout << "LpPPeer end " << std::endl;
54 }
55 };
56
57 class Transport : public L2Provider, public L1Parent{
58 public:
59 void L1PServ(){
60 std::cout << "Lp1 start" << std::endl;
61 lParent2->L2PServ();
62 std::cout << "Lp1 end" << std::endl;
63 }
64 virtual void L2Service(){
65 std::cout << "L2Service starting job" << std::endl;
66 level1->L1Service();
67 std::cout << "L2Service finishing job" << std::endl;
68 }
69 };
70 class Session : public L3Provider, public L2Parent{
71 public:
72 void L2PServ(){
73 std::cout << "doing L3server" << std::endl;
74 }
75 virtual void L3Service(){
76 std::cout << "L3Service starting job" << std::endl;
77 level2->L2Service();
78 std::cout << "L3Service finishing job" << std::endl;
79 }
80 };
81
82 int main()
83 {
84 DataLink dataLink;
85 Transport transport;
86 Session session;
87
88 transport.setLowerLayer(&dataLink);
89 session.setLowerLayer(&transport);
90
91 session.L3Service();
92
93 std::cout << "\r\n =========== \r\n" ;
94 transport.setParentLayer(&session);
95 dataLink.setParentLayer(&transport);
96 dataLink.L1PPeer();
97
98 return 0;
99 }

这里写的是底下三层的一个策略。上层向底层请求服务。还有底层向上层请求服务的一个过程。

在进行分层的时候,需要制定的错误策略就是尽量少的将错误向上层传递。最好在当前层进行处理。否则效率会很低,并且上层也不知道你这层出现的这个错误到底是什么意思。

关于分层还有宽松的分层系统。
对于咱们比较熟悉的应该是API,在底层实现了一套API,然后一般在高层再封装一套易用的API,这样子,你既可以使用上层封装的API也可以使用底层比较晦涩难用的API。

但是分层还是有很多的缺点:行为变化引发的雪崩效应。效率较低(任务在各层中进行传递,而不是立即处理)。不必要的工作(假设读取底层的一组数据,多个上层对底层该数据进行读取,并且都是深度复制,那产生的效率就会低下)。难以确定正确的层次粒度(这个层次粒度要根据实际情况进行分析,并给出正确的取舍。关于串口通信发送命令时的组帧情况,是否通过多次组帧,还是直接一下子将帧组好直接发送过去)。

面向模式的软件架构 模式系统 中的Layers模式

时间: 2024-11-13 11:09:22

Layers 模式的相关文章

微服务架构(Microservice Architecture)

之前一段时间,有听部门架构说起接下来公司要使用微服务架构来研发系统,当时没怎么在意,因为是第一次听说微服务这个名词(果然无知者无畏啊):正好赶上五一假, 我自告奋勇的,接了编写微服务架构培训文档这个任务(也许因为我是文科生,文笔稍微好点).五一假期三天,基本都是在看资料,梳理思路以及编写接下来的培训文档中度过. 下面,就说说我这几天的一些收获吧:先说说资料来源吧:有架构给我的一些资料,以及自己百度和论坛.社区找来的一些资料,权当做一个总结式的简介... 目录如下: 一.微服务架构介绍 二.出现和

设计模式(博客园精化集)

Web Client Software Factory系列(3):View-Presenter模式作者: TerryLee .NET设计模式(18):迭代器模式(Iterator Pattern)作者: TerryLee .NET设计模式(19):观察者模式(Observer Pattern)作者: TerryLee .NET设计模式(2):单件模式(Singleton Pattern)作者: TerryLee .NET设计模式(3):抽象工厂模式(Abstract Factory)作者: Te

[转]微服务架构

本文转自:https://www.cnblogs.com/imyalost/p/6792724.html 资料来源:有架构给我的一些资料,以及自己百度和论坛.社区找来的一些资料,权当做一个总结式的简介... 目录如下: 一.微服务架构介绍 二.出现和发展 三.传统开发模式和微服务的区别 四.微服务的具体特征 五.SOA和微服务的区别 六.如何具体实践微服务 七.常见的微服务设计模式和应用 八.微服务的优点和缺点 九.思考:意识的转变 十.参考资料和推荐阅读 一.微服务架构介绍 微服务架构(Mic

一篇文章带你彻底了解微服务

一.微服务架构介绍 微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦.你可以将其看作是在架构层次而非获取服务的类上应用很多SOLID原则.微服务架构是个很有趣的概念,它的主要作用是将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持.概念:把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持微服务,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议.定义:围绕业务领

SOA 架构与微服务架构的区别

注重重用,微服务注重重写 SOA 的主要目的是为了企业各个系统更加容易地融合在一起. 微服务通常由重写一个模块开始.要把整个巨石型的应用重写是有很大的风险的,也不一定必要.我们向微服务迁移的时候通常从耦合度最低的模块或对扩展性要求最高的模块开始. 把它们一个一个剥离出来用敏捷地重写,可以尝试最新的技术和语言和框架,然后 单独布署.它通常不依赖其他服务.微服务中常用的 API Gateway 的模式主要目的也不是重用代码. 而是减少客户端和服务间的往来.API gateway 模式不等同与 Fac

如何在Windows下用cpu模式跑通py-faster-rcnn 的demo.py

关键字:Windows.cpu模式.Python.faster-rcnn.demo.py 声明:本篇blog暂时未经二次实践验证,主要以本人第一次配置过程的经验写成.计划在7月底回家去电脑城借台机子试试验证步骤的正确性,本blog将根据实际遇到的问题持续更新.另外blog中除提到的下载链接外我还会给出网盘链接方便下载,包括我的整个工程的网盘链接.如果有些报错解决不了可直接拿本人的相关文件替换,本篇blog具有较高的参考性. 本人微软版caffe工程     下载链接:http://pan.bai

GlusterFS六大卷模式說明

GlusterFS六大卷說明 第一,分佈卷 在分布式卷文件被随机地分布在整个砖的体积.使用分布式卷,你需要扩展存储,冗余是重要或提供其他硬件/软件层.(簡介:分布式卷,文件通过hash算法随机的分布到由bricks组成的卷上.卷中资源仅在一台服务器上存储,在存储池中非镜像或条带模式.) (In a distributed volumes files are spread randomly across the bricks in the volume. Use distributed volum

Vulkan Tutorial 04 理解Validation layers

操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 What are validation layers? Vulkan API的设计核心是尽量最小化驱动程序的额外开销,所谓额外开销更多的是指向渲染以外的运算.其中一个具体的表现就是默认条件下,Vulkan API的错误检查的支持非常有限.即使遍历不正确的值或者将需要的参数传递为空指针,也不会有明确的处理逻辑,并且直接导致崩溃或者未定义的异常行为.之所以这样,是因为Vulkan要求每

深入理解 JBoss 7/WildFly Standalone 模式启动过程

概述 JBoss 7/WildFly Standalone 模式启动过程大致如下: 启动脚本 standalone.sh 启动 JBoss Modules,JBoss Modules 启动 JBoss MSC,JBoss MSC 运行加载相关的 Services,本文简单以调试代码的方式,简单说明这几个步骤. 调试 jboss modules 当我们完成 JBoss 安装,我们会发现在 JBOSS_HOME 目录下有一个 `jboss-modules.jar`,该 jar 主要加载 JBoss