做网站建设的好处团购网站建设流程

diannao/2025/10/13 8:17:15/文章来源:
做网站建设的好处,团购网站建设流程,四川建设厅报名网站,广州app网站开发动机 由于某些类型的固有的实现逻辑#xff0c;使得它们具有两个变化的维度#xff0c;乃至多个变化的维度。 如何应对这种“多维度的变化”#xff1f;如何利用面向对象技术来使得类型可以轻松地沿着两个乃至多个方向变化#xff0c;而不引入额外的复杂度 举个栗子 我们…动机 由于某些类型的固有的实现逻辑使得它们具有两个变化的维度乃至多个变化的维度。 如何应对这种“多维度的变化”如何利用面向对象技术来使得类型可以轻松地沿着两个乃至多个方向变化而不引入额外的复杂度 举个栗子 我们有一个发送消息的抽象基类 class Messager{ public:virtual void Login(string name, string password) 0;virtual void SendMessage(string message) 0;virtual void SendPicture(Image image) 0;virtual void PlaySound() 0;virtual void DrawShape() 0;virtual void WriteText() 0;virtual void Connect() 0;virtual ~Messager() {} }; 在这种业务场景下我们需要发送消息实现登录发送文字发送图片的功能。同时也可能有播放声音等等其他的功能需求。 针对不同的平台我们需要不同的实现逻辑来完成基础需求。 class PCMessagerBase : public Messager{ public:virtual void PlaySound(){//PC平台的实现逻辑}virtual void DrawShape(){//PC平台的实现}virtual void WriteText(){//PC平台的实现}virtual void Connect(){//PC平台的实现} };class MobileMessagerBase : public Messager{ public:virtual void PlaySound(){//Mobile平台的实现逻辑}virtual void DrawShape(){//Mobile平台的实现}virtual void WriteText(){//Mobile平台的实现}virtual void Connect(){//Mobile平台的实现} }; 针对具体的不同业务场景我们需要有不同的逻辑。比如说我们需要一种精简版的逻辑同时需要一种完美版的逻辑类似针对非会员和会员的不同处理 //业务逻辑 class PCMessagerLite : public PCMessagerBase{ public:virtual void Login(string name, string password){PCMessagerBase::Connect(); //在登录前与服务器等等保持连接//...}virtual void SendMessage(string message){PCMessagerBase::WriteText(); //在发送消息前进行消息的输入//...}virtual void SendPicture(Image image){PCMessagerBase::DrawShape(); //发送图片前对图片的处理等等//...} };class PCMessagerPerfect : public PCMessagerBase{ public:virtual void Login(string name, string password){PCMessagerBase::PlaySound();PCMessagerBase::Connect(); //在登录前与服务器等等保持连接//...}virtual void SendMessage(string message){PCMessagerBase::PlaySound();PCMessagerBase::WriteText(); //在发送消息前进行消息的输入//...}virtual void SendPicture(Image image){PCMessagerBase::PlaySound();PCMessagerBase::DrawShape(); //发送图片前对图片的处理等等//...} }; perfect版本在lite版本的基础上可能有一些其他的行为比如说播放一段音乐等等。 //业务逻辑 class MobileMessagerLite : public MobileMessagerBase{ public:virtual void Login(string name, string password){MobileMessagerBase::Connect(); //在登录前与服务器等等保持连接//...}virtual void SendMessage(string message){MobileMessagerBase::WriteText(); //在发送消息前进行消息的输入//...}virtual void SendPicture(Image image){MobileMessagerBase::DrawShape(); //发送图片前对图片的处理等等//...} };class MobileMessagerPerfect : public MobileMessagerBase{ public:virtual void Login(string name, string password){MobileMessagerBase::PlaySound();MobileMessagerBase::Connect(); //在登录前与服务器等等保持连接//...}virtual void SendMessage(string message){MobileMessagerBase::PlaySound();MobileMessagerBase::WriteText(); //在发送消息前进行消息的输入//...}virtual void SendPicture(Image image){MobileMessagerBase::PlaySound();MobileMessagerBase::DrawShape(); //发送图片前对图片的处理等等//...} }; 在移动端平台上也是一样的。业务流程是一样的可能有一些实现调用了MobileMessagerBase基类的方法。 存在的问题 现在存在的类的关系是这样的。这样的类中间存在的大量的重复代码比如PCMessageLite和MobileMessageLite的Login函数中逻辑明显是一样的唯一的区别在于调用的基类的Connect函数不同。 这样明显是一种不好的设计。这与我们之前写过的装饰模式中的问题非常类似。C设计模式 #5 装饰模式Decorator-CSDN博客 重构 如果参考装饰模式Decorator的方式我们可以将代码重构成以下这种形式。 class MessagerLite{Messager* messager; //在运行时 new PCMessagerBase() 或者 MobileMessagerBase() public:virtual void Login(string name, string password) {messager-Connect(); //在登录前与服务器等等保持连接//...}virtual void SendMessage(string message) {messager-WriteText(); //在发送消息前进行消息的输入//...}virtual void SendPicture(Image image) {messager-DrawShape(); //发送图片前对图片的处理等等//...} };class MessagerPerfect {Messager* messager; //在运行时 new PCMessagerBase() 或者 MobileMessagerBase() public:virtual void Login(string name, string password) {messager-PlaySound();messager-Connect(); //在登录前与服务器等等保持连接//...}virtual void SendMessage(string message) {messager-PlaySound();messager-WriteText(); //在发送消息前进行消息的输入//...}virtual void SendPicture(Image image) {messager-PlaySound();messager-DrawShape(); //发送图片前对图片的处理等等//...} }; 看起来这种方法是可行的但是注意这种方法存在着致命的缺陷。 PCMessagerBase和MobileMessagerBase这两个类只重载了Messager类中的两个三个方法另外三个依然是纯虚函数。PCMessagerBase和MobileMessagerBase这两个类依然是纯虚基类它们是不可以被实例化的也就是说我们在运行时是无法初始化MessagerLite的messager指针为PCMessagerBase的。 造成这种问题的原因是Messager的这些函数放在一个类中并不合适。我们将代码彻底重构成如下形式 class Messager { protected:MessagerImp* messager; //在运行时 new PCMessagerBase() 或者 MobileMessagerBase() public:virtual void Login(string name, string password) 0;virtual void SendMessage(string message) 0;virtual void SendPicture(Image image) 0;virtual ~Messager() {} };class MessagerImp { public:virtual void PlaySound() 0;virtual void DrawShape() 0;virtual void WriteText() 0;virtual void Connect() 0;virtual ~MessagerImp() {} };class PCMessagerBase : public MessagerImp { public:virtual void PlaySound() {//PC平台的实现逻辑}virtual void DrawShape() {//PC平台的实现}virtual void WriteText() {//PC平台的实现}virtual void Connect() {//PC平台的实现} };class MobileMessagerBase : public MessagerImp { public:virtual void PlaySound() {//Mobile平台的实现逻辑}virtual void DrawShape() {//Mobile平台的实现}virtual void WriteText() {//Mobile平台的实现}virtual void Connect() {//Mobile平台的实现} };//业务逻辑 class MessagerLite : public Messager{ public:virtual void Login(string name, string password) {messager-Connect(); //在登录前与服务器等等保持连接//...}virtual void SendMessage(string message) {messager-WriteText(); //在发送消息前进行消息的输入//...}virtual void SendPicture(Image image) {messager-DrawShape(); //发送图片前对图片的处理等等//...} };class MessagerPerfect : public Messager{ public:virtual void Login(string name, string password) {messager-PlaySound();messager-Connect(); //在登录前与服务器等等保持连接//...}virtual void SendMessage(string message) {messager-PlaySound();messager-WriteText(); //在发送消息前进行消息的输入//...}virtual void SendPicture(Image image) {messager-PlaySound();messager-DrawShape(); //发送图片前对图片的处理等等//...} }; 当前类的关系是这样的我们成功的将业务上的扩展MessagerLite/MessagerPerfect与平台上的扩展PCMessagerBase/MobileMessagerBase两个方向上分开。用(nm)数量的类实现了(n*m)的功能。 模式定义 将抽象部分业务功能与实现部分平台实现分离使它们都可以独立地变化。——《设计模式》GoF 同样红色的部分是稳定的蓝色的部分是变化的。 体现在我们上面的代码中就是Messager类与MessagerImp类中间搭了一座桥。使得业务功能与平台扩展两个方向上可以分开变化。 总结 桥模式使用“对象间的组合关系”解耦了抽象和实现之间固有的绑定关系使得抽象和实现可以沿着各自的维度变化。所谓抽象和实现沿着各自维度变化即“子类化”桥模式有时候类似于多继承方案但是多继承方案往往违背单一职责原则即一个类只有一个变化的原因复用性较差。桥模式是比多继承方案更好的解决办法。桥模式一般应用于“两个非常强的变化维度”有时一个类有多于两个的维度变化这时也可以使用桥模式的扩展模式。

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

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

相关文章

建设一个网站的硬件要求广西美丽乡村建设网站

一、环境搭建 1、安装nodejs #下载地址 https://nodejs.org/dist/v20.9.0/node-v20.9.0-x64.msi 2、配置环境变量 上面下载完安装包后自行安装,安装完成后安装下图操作添加环境变量 #查看版本 node --version v20.9.0# npm --version 10.1.03、配置npm加速源 np…

做网站引流的最佳方法山西建设行政主管部门官方网站

在弱电施工中,设备调试是一个很重要的环节,施工这么久就是为了实现弱电各系统的功能,调试是每一个弱电人系必需会的技能,也是检验你结合能力一种体现。在调试中会遇到各种你想不到的问题,当遇到问题时,你应…

专门做诺丽果的网站增城专业建站公司

本文将介绍如何使用 2-3 句指令在几分钟内创建一个 Web IDE 环境。服务器准备如何准备服务器可以参考上文 一键体验 Istio,这里只需要一台即可,示例中的服务器 IP 为:43.154.189.116安装 Web IDE下载安装工具在服务器上,执行以下指…

深圳专业制作网站技术wordpress人才主题

转自: https://www.zhihu.com/question/21329754 分类和回归的区别在于输出变量的类型。 定量输出称为回归,或者说是连续变量预测; 定性输出称为分类,或者说是离散变量预测。 举个例子: 预测明天的气温是多少度&…

蓬莱有做网站的吗网站加入百度广告联盟

Android 消息处理机制:Handler|Message

wordpress站点搬家男女做网站

今天我刚好要做一个单页面来展示某些东西。 就一起来看看吧&#xff0c;初学者写的不好请自闭双眼。 先上代码吧&#xff0c;大家看看有什么需要修改的地方。 1 <!DOCTYPE html>2 <html lang"en">3 4 <head>5 <meta charset"UTF-8&q…

微网站 方案贵州住房和城乡建设局网站

网络安全投资和准备被视为推动企业发展的关键因素。除了避免损失之外&#xff0c;高管还应利用有效的以业务为中心的安全方法&#xff0c;通过大规模实现敏捷性和创新来推动收入增长。 主要发现 高增长公司通过扩大商业足迹来推动业绩&#xff0c;这需要大规模的创新、敏捷性和…

南京 外贸网站建设WordPress刷下载量

随着春风的温柔拂面&#xff0c;我们即将迎来一年一度的三八国际妇女节。这个特别的日子&#xff0c;不仅是对女性贡献的认可和庆祝&#xff0c;也是向我们生命中的女性表达感激和爱意的绝佳时机。在这个充满温馨和敬意的时刻&#xff0c;我们常常在思考&#xff0c;如何用一份…

商业平台网站开发网站的折线图怎么做

转自本人在知乎上面的答案印如意Fitz 通过往邮箱发送邮件&#xff0c;从而达到控制电脑or开始抓取数据or播放音乐等系列操作。 like that: 先用我的常用邮箱给我备胎邮箱发送一封主题为“shutdown”的邮件 然后我要关机的电脑检测到了自动关机并发挥一封主题为“already shutdo…

农业机械网站模板wordpress吐槽源码

任务描述 本关任务&#xff1a;编写一个程序&#xff0c;判断从键盘输入的数是不是水仙花数。 水仙花数是指一个3位数字&#xff0c;它各位数字的3次幂之和等于它本身。如153是一个水仙花数&#xff0c;因为&#xff1a; 1531 3 5 3 3 3 相关知识 为了完成本关任务&am…

企业门户网站建设案例网站栏目模板如何选择

两个主要的步骤&#xff1a; 设计分压器电路来测量NTC&#xff08;负温度系数热敏电阻&#xff09;的阻值。编写C语言函数来使用测量的阻值和NTC参数计算温度。 首先&#xff0c;让我们设计分压器电路。 分压器电路设计 您需要一个已知阻值的参考电阻&#xff0c;通常推荐与…

鄂州网站建设公司海南平台网站建设平台

介绍 先来介绍一下 mapstructure 这个库主要用来做什么的吧&#xff0c;官网是这么介绍的&#xff1a; mapstructure 是一个 Go 库&#xff0c;用于将通用映射值解码为结构&#xff0c;反之亦然&#xff0c;同时提供有用的错误处理。 该库在解码数据流&#xff08;JSON、Gob …

如何建一个公司的网站获取微信公众号首图

吴用说只有公孙胜可以破法术&#xff0c;于是宋江请戴宗和李逵去蓟州。两人听说公孙胜的师傅罗真人在九宫县二仙山讲经&#xff0c;于是到了二仙山&#xff0c;并在山下找到了公孙胜的家。 两人请公孙胜去帮助打高唐州&#xff0c;公孙胜说听师傅的。罗真人说出家人不管闲事&a…

徐州企业建站模板wordpress新建页面发布内容

Activity生命周期Activity是一个用来提供用户交互界面的组件&#xff0c;它是四大组件之一&#xff0c;对于我们刚刚学习android的菜鸟来说是非常重要的&#xff0c;我们可以将一个屏幕理解为一个Activity&#xff0c;Activity通常是一个全屏的界面&#xff0c;每一个应用程序可…

石家庄物流网站建设长子网站建设

虽然作业还没有做完&#xff0c;但是我还是放不下它&#xff0c;对此&#xff0c;我只想说&#xff1a; 今天你对作业爱理不理&#xff0c;明天它就让你补到飞起 DP先放放&#xff0c;我们要雨露均沾练习上手&#xff1a;乘法逆元题目题解代码实现曹冲养猪?&#xff08;互质的…

h5网页制作平台seo教程大秦英扬

参考&#xff1a;C语言的枚举类型&#xff08;Enum) 地址&#xff1a;https://blog.csdn.net/aliyonghang/article/details/123615803?spm1001.2014.3001.5502 在实际编程中&#xff0c;有些数据的取值往往是有限的&#xff0c;只能是非常少量的整数&#xff0c;并且最好为每个…

医院网站制作好吗企业网站手机端跳转设置

摘要&#xff1a;李建中等编著的这本《C语言程序设计实训指导书》为《C语言程序设计》的配套教材.全书共分4部分.第1部分主要介绍Visual C6.0的集成功能界面和操作;第2部分配合主教材的内容,设计了11个实验项目;第3部分对主教材每一章习题给出解答或指导;第4部分为全国计算机等…

怎样给网站做app学做网站卖东西去哪学

package scala06object scala07_ABSClass {// 抽象属性 抽象方法 def main(args: Array[String]): Unit = { // 抽象类用法 // 实例化子类 val student0 = new Student08 student0.sayHi("lisi")// 直接实例化抽象类(匿名子类) //匿名子类 是多态的一种体现 (父…

工具网站有哪些乌海做网站

代理模式的定义&#xff1a; Provide a surrogate or placeholder for another object to control access to it.&#xff08;为其他对象提供一种代理以控制对这个对象的访问。&#xff09; 简单说&#xff0c;就是设置一个中间代理来控制访问原目标对象&#xff0c;达到增强原…

建筑专业网站有哪些外包公司劳动合同

1、问题 svn下载的项目路径需要换&#xff0c;也就是下面的URL:SVN:// 需要修改 2、解决办法 linux平台 svn switch --relocate oldSvnPath newSvnPath windows平台 右击项目 TortoiseSVN->Relocate 然后修改就行