个人网站建设方案书网站建设完成后 下一步做什么

bicheng/2026/1/21 19:52:51/文章来源:
个人网站建设方案书,网站建设完成后 下一步做什么,上海平面设计公司排行榜,网页开发人员工具亦称#xff1a; 调解人、控制器、Intermediary、Controller、Mediator 意图 中介者模式是一种行为设计模式#xff0c; 能让你减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互#xff0c; 迫使它们通过一个中介者对象进行合作。 问题 假如你有一个创建… 亦称 调解人、控制器、Intermediary、Controller、Mediator 意图 中介者模式是一种行为设计模式 能让你减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互 迫使它们通过一个中介者对象进行合作。 问题 假如你有一个创建和修改客户资料的对话框 它由各种控件组成 例如文本框 Text­Field、 复选框 Checkbox 和按钮 Button 等。 用户界面中各元素间的关系会随程序发展而变得混乱。 某些表单元素可能会直接进行互动。 例如 选中 “我有一只狗” 复选框后可能会显示一个隐藏文本框用于输入狗狗的名字。 另一个例子是提交按钮必须在保存数据前校验所有输入内容。 元素间存在许多关联。 因此 对某些元素进行修改可能会影响其他元素。 如果直接在表单元素代码中实现业务逻辑 你将很难在程序其他表单中复用这些元素类。 例如 由于复选框类与狗狗的文本框相耦合 所以将无法在其他表单中使用它。 你要么使用渲染资料表单时用到的所有类 要么一个都不用。 解决方案 中介者模式建议你停止组件之间的直接交流并使其相互独立。 这些组件必须调用特殊的中介者对象 通过中介者对象重定向调用行为 以间接的方式进行合作。 最终 组件仅依赖于一个中介者类 无需与多个其他组件相耦合。 在资料编辑表单的例子中 对话框 Dialog 类本身将作为中介者 其很可能已知自己所有的子元素 因此你甚至无需在该类中引入新的依赖关系。 UI 元素必须通过中介者对象进行间接沟通。 绝大部分重要的修改都在实际表单元素中进行。 让我们想想提交按钮。 之前 当用户点击按钮后 它必须对所有表单元素数值进行校验。 而现在它的唯一工作是将点击事件通知给对话框。 收到通知后 对话框可以自行校验数值或将任务委派给各元素。 这样一来 按钮不再与多个表单元素相关联 而仅依赖于对话框类。 你还可以为所有类型的对话框抽取通用接口 进一步削弱其依赖性。 接口中将声明一个所有表单元素都能使用的通知方法 可用于将元素中发生的事件通知给对话框。 这样一来 所有实现了该接口的对话框都能使用这个提交按钮了。 采用这种方式 中介者模式让你能在单个中介者对象中封装多个对象间的复杂关系网。 类所拥有的依赖关系越少 就越易于修改、 扩展或复用。 真实世界类比 飞行器驾驶员之间不会通过相互沟通来决定下一架降落的飞机。 所有沟通都通过控制塔台进行。 飞行器驾驶员们在靠近或离开空中管制区域时不会直接相互交流。 但他们会与飞机跑道附近 塔台中的空管员通话。 如果没有空管员 驾驶员就需要留意机场附近的所有飞机 并与数十位飞行员组成的委员会讨论降落顺序。 那恐怕会让飞机坠毁的统计数据一飞冲天吧。 塔台无需管制飞行全程 只需在航站区加强管控即可 因为该区域的决策参与者数量对于飞行员来说实在太多了。 中介者模式结构 组件 Component 是各种包含业务逻辑的类。 每个组件都有一个指向中介者的引用 该引用被声明为中介者接口类型。 组件不知道中介者实际所属的类 因此你可通过将其连接到不同的中介者以使其能在其他程序中复用。 中介者 Mediator 接口声明了与组件交流的方法 但通常仅包括一个通知方法。 组件可将任意上下文 包括自己的对象 作为该方法的参数 只有这样接收组件和发送者类之间才不会耦合。 具体中介者 Concrete Mediator 封装了多种组件间的关系。 具体中介者通常会保存所有组件的引用并对其进行管理 甚至有时会对其生命周期进行管理。 组件并不知道其他组件的情况。 如果组件内发生了重要事件 它只能通知中介者。 中介者收到通知后能轻易地确定发送者 这或许已足以判断接下来需要触发的组件了。 对于组件来说 中介者看上去完全就是一个黑箱。 发送者不知道最终会由谁来处理自己的请求 接收者也不知道最初是谁发出了请求。 伪代码 在本例中 中介者模式可帮助你减少各种 UI 类 按钮、 复选框和文本标签 之间的相互依赖关系。 UI 对话框类的结构 用户触发的元素不会直接与其他元素交流 即使看上去它们应该这样做。 相反 元素只需让中介者知晓事件即可 并能在发出通知时同时传递任何上下文信息。 本例中的中介者是整个认证对话框。 对话框知道具体元素应如何进行合作并促进它们的间接交流。 当接收到事件通知后 对话框会确定负责处理事件的元素并据此重定向请求。 // 中介者接口声明了一个能让组件将各种事件通知给中介者的方法。中介者可对这 // 些事件做出响应并将执行工作传递给其他组件。 interface Mediator ismethod notify(sender: Component, event: string)// 具体中介者类可解开各组件之间相互交叉的连接关系并将其转移到中介者中。 class AuthenticationDialog implements Mediator isprivate field title: stringprivate field loginOrRegisterChkBx: Checkboxprivate field loginUsername, loginPassword: Textboxprivate field registrationUsername, registrationPassword,registrationEmail: Textboxprivate field okBtn, cancelBtn: Buttonconstructor AuthenticationDialog() is// 创建所有组件对象并将当前中介者传递给其构造函数以建立连接。// 当组件中有事件发生时它会通知中介者。中介者接收到通知后可自行处理// 也可将请求传递给另一个组件。method notify(sender, event) isif (sender loginOrRegisterChkBx and event check)if (loginOrRegisterChkBx.checked)title 登录// 1. 显示登录表单组件。// 2. 隐藏注册表单组件。elsetitle 注册// 1. 显示注册表单组件。// 2. 隐藏登录表单组件。if (sender okBtn event click)if (loginOrRegister.checked)// 尝试找到使用登录信息的用户。if (!found)// 在登录字段上方显示错误信息。else// 1. 使用注册字段中的数据创建用户账号。// 2. 完成用户登录工作。// ……// 组件会使用中介者接口与中介者进行交互。因此只需将它们与不同的中介者连接 // 起来你就能在其他情境中使用这些组件了。 class Component isfield dialog: Mediatorconstructor Component(dialog) isthis.dialog dialogmethod click() isdialog.notify(this, click)method keypress() isdialog.notify(this, keypress)// 具体组件之间无法进行交流。它们只有一个交流渠道那就是向中介者发送通知。 class Button extends Component is// ……class Textbox extends Component is// ……class Checkbox extends Component ismethod check() isdialog.notify(this, check)// …… 中介者模式适合应用场景 当一些对象和其他对象紧密耦合以致难以对其进行修改时 可使用中介者模式。 该模式让你将对象间的所有关系抽取成为一个单独的类 以使对于特定组件的修改工作独立于其他组件。 当组件因过于依赖其他组件而无法在不同应用中复用时 可使用中介者模式。 应用中介者模式后 每个组件不再知晓其他组件的情况。 尽管这些组件无法直接交流 但它们仍可通过中介者对象进行间接交流。 如果你希望在不同应用中复用一个组件 则需要为其提供一个新的中介者类。 如果为了能在不同情景下复用一些基本行为 导致你需要被迫创建大量组件子类时 可使用中介者模式。 由于所有组件间关系都被包含在中介者中 因此你无需修改组件就能方便地新建中介者类以定义新的组件合作方式。 实现方式 找到一组当前紧密耦合 且提供其独立性能带来更大好处的类 例如更易于维护或更方便复用。 声明中介者接口并描述中介者和各种组件之间所需的交流接口。 在绝大多数情况下 一个接收组件通知的方法就足够了。 如果你希望在不同情景下复用组件类 那么该接口将非常重要。 只要组件使用通用接口与其中介者合作 你就能将该组件与不同实现中的中介者进行连接。 实现具体中介者类。 该类可从自行保存其下所有组件的引用中受益。 你可以更进一步 让中介者负责组件对象的创建和销毁。 此后 中介者可能会与工厂或外观类似。 组件必须保存对于中介者对象的引用。 该连接通常在组件的构造函数中建立 该函数会将中介者对象作为参数传递。 修改组件代码 使其可调用中介者的通知方法 而非其他组件的方法。 然后将调用其他组件的代码抽取到中介者类中 并在中介者接收到该组件通知时执行这些代码。 中介者模式优缺点 单一职责原则。 你可以将多个组件间的交流抽取到同一位置 使其更易于理解和维护。 开闭原则。 你无需修改实际组件就能增加新的中介者。 你可以减轻应用中多个组件间的耦合情况。 你可以更方便地复用各个组件。 一段时间后 中介者可能会演化成为上帝对象。 与其他模式的关系 责任链模式、 命令模式、 中介者模式和观察者模式用于处理请求发送者和接收者之间的不同连接方式 责任链按照顺序将请求动态传递给一系列的潜在接收者 直至其中一名接收者对请求进行处理。命令在发送者和请求者之间建立单向连接。中介者清除了发送者和请求者之间的直接连接 强制它们通过一个中介对象进行间接沟通。观察者允许接收者动态地订阅或取消接收请求。 外观模式和中介者的职责类似 它们都尝试在大量紧密耦合的类中组织起合作。 外观为子系统中的所有对象定义了一个简单接口 但是它不提供任何新功能。 子系统本身不会意识到外观的存在。 子系统中的对象可以直接进行交流。中介者将系统中组件的沟通行为中心化。 各组件只知道中介者对象 无法直接相互交流。 中介者和观察者之间的区别往往很难记住。 在大部分情况下 你可以使用其中一种模式 而有时可以同时使用。 让我们来看看如何做到这一点。 中介者的主要目标是消除一系列系统组件之间的相互依赖。 这些组件将依赖于同一个中介者对象。 观察者的目标是在对象之间建立动态的单向连接 使得部分对象可作为其他对象的附属发挥作用。 有一种流行的中介者模式实现方式依赖于观察者。 中介者对象担当发布者的角色 其他组件则作为订阅者 可以订阅中介者的事件或取消订阅。 当中介者以这种方式实现时 它可能看上去与观察者非常相似。 当你感到疑惑时 记住可以采用其他方式来实现中介者。 例如 你可永久性地将所有组件链接到同一个中介者对象。 这种实现方式和观察者并不相同 但这仍是一种中介者模式。 假设有一个程序 其所有的组件都变成了发布者 它们之间可以相互建立动态连接。 这样程序中就没有中心化的中介者对象 而只有一些分布式的观察者。 代码示例 #include iostream #include string /*** The Mediator interface declares a method used by components to notify the* mediator about various events. The Mediator may react to these events and* pass the execution to other components.*/ class BaseComponent; class Mediator {public:virtual void Notify(BaseComponent *sender, std::string event) const 0; };/*** The Base Component provides the basic functionality of storing a mediators* instance inside component objects.*/ class BaseComponent {protected:Mediator *mediator_;public:BaseComponent(Mediator *mediator nullptr) : mediator_(mediator) {}void set_mediator(Mediator *mediator) {this-mediator_ mediator;} };/*** Concrete Components implement various functionality. They dont depend on* other components. They also dont depend on any concrete mediator classes.*/ class Component1 : public BaseComponent {public:void DoA() {std::cout Component 1 does A.\n;this-mediator_-Notify(this, A);}void DoB() {std::cout Component 1 does B.\n;this-mediator_-Notify(this, B);} };class Component2 : public BaseComponent {public:void DoC() {std::cout Component 2 does C.\n;this-mediator_-Notify(this, C);}void DoD() {std::cout Component 2 does D.\n;this-mediator_-Notify(this, D);} };/*** Concrete Mediators implement cooperative behavior by coordinating several* components.*/ class ConcreteMediator : public Mediator {private:Component1 *component1_;Component2 *component2_;public:ConcreteMediator(Component1 *c1, Component2 *c2) : component1_(c1), component2_(c2) {this-component1_-set_mediator(this);this-component2_-set_mediator(this);}void Notify(BaseComponent *sender, std::string event) const override {if (event A) {std::cout Mediator reacts on A and triggers following operations:\n;this-component2_-DoC();}if (event D) {std::cout Mediator reacts on D and triggers following operations:\n;this-component1_-DoB();this-component2_-DoC();}} };/*** The client code.*/void ClientCode() {Component1 *c1 new Component1;Component2 *c2 new Component2;ConcreteMediator *mediator new ConcreteMediator(c1, c2);std::cout Client triggers operation A.\n;c1-DoA();std::cout \n;std::cout Client triggers operation D.\n;c2-DoD();delete c1;delete c2;delete mediator; }int main() {ClientCode();return 0; } Output.txt: 执行结果 Client triggers operation A. Component 1 does A. Mediator reacts on A and triggers following operations: Component 2 does C.Client triggers operation D. Component 2 does D. Mediator reacts on D and triggers following operations: Component 1 does B. Component 2 does C.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/88090.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wordpress站点标题图片网络规划

文章目录 一、Vue项目引入ECharts二、CDH搭建,为动态图提供数据三、Vue+ ECharts常见问题四、热门文章一、Vue项目引入ECharts Vue是一个用于构建用户界面的渐进式JavaScript框架,可以轻松构建单页面应用程序(SPA)。ECharts是一个基于JavaScript的数据可视化库,可以通过简单…

wordpress 页面 小工具郑州seo外包服务

2024年1月,国际电信联盟标准部门(ITU-T)正式发布了由腾讯主导制定的《F.749.8 In-vehicle multimedia applets: Framework and functional requirements》(车载多媒体小程序框架和技术需求)国际标准。 这是全球首个由中国企业主导制定的车载小…

油边机 东莞网站建设开发一个页面多少钱

文章目录 1. redo日志 1. redo日志 口述:redo log 日志其实保证了ACID中的持久性,就是说当事务commit后,那么相应的修改呀更新这些操作其实都会记录到redo log中,其实这里的操作还是区别于redis中的aof中,它不是具体的…

西安做网站微信公司企业微信开通流程

计算机网络的概述 概念 网络:网状类的东西或系统。 计算机网络:是一个将分散的、具有独立性功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。即计算机网络是互连(通过通信链路互连…

信誉好的东莞网站设计诸暨网站开发

filter() 是 Python 中的一个内置函数,用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该函数接收两个参数,一个是函数,一个是序列,序列的每个元素作为参数传递给函数进行判定&…

做花藤字网站免费网站可以做cpa?

题目链接 :验证身份 题目要求: 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5&a…

小男孩和女人做的网站私域流量scrm系统

目录 一、前言二、解决方案三、结尾 一、前言 我们在安装某些第三方开发者开发的应用时,无法在 Mac 上运行,提示已经损坏,报以下错误:Mac系统安装PicGo时打开报错:文件已损坏,您应该将它移到废纸篓 二、解决…

网站开发运营经理中国菲律宾南海仁爱礁最新新闻

前提:安装的Wireshark要有Npcap。 步骤 打开Wireshark,选择Adapter for loopback traffic capture,在过滤器中填写需要监听的端口,再双击Adapter for loopback traffic capture。 点击左上角,开始捕获。

河西做网站公司wordpress叶子

一、什么是yum yum是Linux下的软件包管理器 二、什么是软件包管理器 1、在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. 2、但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在…

做新浪微博网站需要常州网站建设价位

docker images docker pull nginx 运行 docker images 查看Nginx镜像是否获取成功,若为如下所示即为获取成功: docker run -p 8080:80 -d nginx docker run –name 容器名 -d(后台运行)-p 本地端口:容器端口 -v(挂载) 挂载本地路径…

网站热度查询wordpress修改邮件模板

文章目录 Android Studio Dolphin简介一、核心特性二、新增功能三、用户体验优化 一,下载百度网盘迅雷云盘 二,安装三,下载组件四,添加SDK五,创建项目六,安装 Device模拟器运行项目 Android Studio Dolphin…

先做网站 先备案建立企业门户网站

PML4(Page Map Level 4)是x86-64架构中用于管理虚拟内存地址翻译的四级页表结构之一。它是一种树形结构,由多个页目录表(Page Directory Pointer Table,PDPT)组成,每个PDPT有512个指向下一级页表…

中山网站建设备案软件工程师工作内容

想要精通算法和SQL的成长之路 - 验证二叉树的前序序列化 前言一. 验证二叉树的前序序列化 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 验证二叉树的前序序列化 原题链接 思路(参考负雪明图): 首先我们看题目所给的字符串&#xff…

网站防止机器注册智能建站

C#中的扩展方法(Extension Methods)是一种特殊的静态方法,它允许我们向现有的类或接口添加新的方法,而无需修改原始类的定义或创建子类。通过扩展方法,我们可以在不改变已有代码的情况下,为现有类型添加新的…

校园综合门户网站建设方案榆林网站建设哪家好

1.继承关系(泛化) 类与子类的关系,指一个类继承另外的一个类。 2.实现关系 一个类可以实现多个接口,实现所有接口的功能。 3.依赖关系 类B作为类A方法中的局部变量或者参数出现,表示A依赖B。 4.关联关系 类B作为类A中的成员变量出现&#…

做分析图很好用的网站潮州市工程建设网站

jmeter 可以做性能测试,这个很多人都知道,那你知道,jmeter 可以在启动运行时,指定线程数和运行时间,自定义性能场景吗? jmeter 性能测试,动态设定性能场景 平时,我们使用 jmeter 进…

广东加盟网站建设网络营销策划书范文模板

🎈归属专栏:从浅学到熟知Linux 🚗个人主页:Jammingpro 🐟每日一句:一篇又一篇,学写越上头。 文章前言:本文介绍find、grep、head和tail指令用法并给出示例和截图。 文章目录 find基本…

四川省建设厅申报网站进一步加强网站建设管理

简介 Spring Boot是一个使用Java编写的开源框架,用于快速构建基于Spring的应用程序。在实际开发中,经常需要对输入参数进行验证,以确保数据的完整性和准确性。Spring Boot提供了多种方式来进行参数验证,并且可以很方便地集成到应…

建设局网站投诉电话怎么推广我做的网站

最近在做文件处理系统中,要把最近打开文件显示出来,方便用户使用。网上资料有说,去遍历“C:\Documents and Settings\Administrator\Recent”下的最近文档本。文主要介绍在Winform界面菜单中实现【最近使用的文件】动态菜单的处理&#xff0c…

论坛类网站建设校园网站建设的需求分析

1、Kafka介绍 Kafka是一款开源的分布式消息系统,最初由LinkedIn公司开发并开源。它被设计用于处理海量的实时数据流,可以支持高吞吐量和低延迟的数据传输。 Kafka的设计主要目标是提供一个持久化的、高吞吐量的、可扩展的、分布式发布/订阅消息系统&am…