当前位置: 首页 > news >正文

类网站建设淘宝代运营1个月多少钱

类网站建设,淘宝代运营1个月多少钱,海报自动设计网站,关于做公司网站建设你应该知道的桥梁模式 引子 它是一个功能非常强大而且适用于多种情况的模式。 定义与结构 GOF 在《设计模式》中给桥梁模式的定义为:将抽象部分与它的实现部分分离,使它们都可以独立地变化。这里的抽象部分和实现部分不是我们通常认为的父类与子类、接口与实现类的关系,而是组合关系。也…

桥梁模式

引子

它是一个功能非常强大而且适用于多种情况的模式。

定义与结构

GOF 在《设计模式》中给桥梁模式的定义为:将抽象部分与它的实现部分分离,使它们都可以独立地变化。这里的抽象部分和实现部分不是我们通常认为的父类与子类、接口与实现类的关系,而是组合关系。也就是说,实现部分是被抽象部分调用,以用来完成(实现)抽象部分的功能。

在《Thinking in Patterns with Java》一书中,作者将抽象部分叫做“front-end”(权且翻译为“前端”),而实现部分叫做“back-end”(后端)。这种叫法要比抽象实现什么的好理解多了。

系统设计中,总是充满了各种变数,这是防不慎防的。面对这样那样的变动,你只能去不停的修改设计和代码,并且要开始新的一轮测试…。

那采取什么样的方式可以较好的解决变化带给系统的影响?你可以分析变化的种类,将不变的框架使用抽象类定义出来,然后再将变化的内容使用具体的子类来分别实现。这样面向客户的只是一个抽象类,这种方式可以较好的避免为抽象类中现有接口添加新的实现所带来的影响,缩小了变化带来的影响。但是这可能会造成子类数量的爆炸,并且在某些时候不是很灵活。

当这颗继承树上一些子树存在了类似的行为。这意味着这些子树中存在了几乎重复的功能代码。这时我们不妨将这些行为提取出来,也采用接口的方式提供出来,然后以组合的方式将服务提供给原来的子类。这样就达到了前端和被使用的后端独立的变化,而且还达到了后端的重用。

其实这就是桥梁模式的诞生。桥梁模式由如下四种角色组成:

  1. 抽 象 ( Abstraction ) 角 色 : 它 定 义 了 抽 象 类 的 接 口 而 且 维 护 着 一 个 指 向 实 现(Implementor)角色的引用。

  2. 精确抽象(RefinedAbstraction)角色:实现并扩充由抽象角色定义的接口。

  3. 实现(Implementor)角色:给出了实现类的接口,这里的接口与抽象角色中的接口可以不一致。

  4. 具体实现(ConcreteImplementor)角色:给出了实现角色定义接口的具体实现。

再放上个类图就更清晰了:

在这里插入图片描述

实例

我现在唯一知道的使用桥梁模式的应用就是 java AWT 框架。使用过 java AWT 的人都知道,在不同系统下开发的软件界面都带有不同系统独有的风格。而在使用 AWT 的 API 的时候根本就没有对不同系统的区分,你也根本就不需要去关心这一点。AWT 中正是使用桥梁模式来做到这一点的,而且桥梁模式的应用使得 AWT 的结构层次更加灵活。

不过我对 AWT 的代码不熟悉,所以也没有办法在这里讲解一下。下面只能举一个常见的教学代码了:以下代码来自《Thinking in Patterns with Java》:

//抽象部分(前端)的抽象角色
class Abstraction {//维护着一个指向实现(Implementor)角色的引用private Implementation implementation;public Abstraction(Implementation imp) {implementation = imp;}// 下面定义了前端(抽象部分)应该有的接口public void service1() {//使用了后端(实现部分)已有的接口//组合实现功能implementation.facility1();implementation.facility2();}public void service2() {implementation.facility2();implementation.facility3();}public void service3() {implementation.facility1();implementation.facility2();implementation.facility4();}// For use by subclasses:protected Implementation getImplementation() {return implementation;}
}
//抽象部分(前端)的精确抽象角色
class ClientService1 extends Abstraction {public ClientService1(Implementation imp) { super(imp); }//使用抽象角色提供的方法组合起来完成某项功能//这就是为什么叫精确抽象角色(修正抽象角色)public void serviceA() {service1();service2();}public void serviceB() {service3();}
}
//另一个精确抽象角色,和上面一样的被我省略了
class ClientService2 extends Abstraction {。。。。//这里是直接通过实现部分的方法来实现一定的功能public void serviceE() {getImplementation().facility3();}
}
//实现部分(后端)的实现角色
interface Implementation {
//这个接口只是定义了一定的接口void facility1();void facility2();void facility3();void facility4();
}
//具体实现角色就是要将实现角色提供的接口实现
//并完成一定的功能
//这里省略了
class Implementation1 implements Implementation {
。。。。

在上面的程序中还体现出一点特色:就是不仅实现部分和抽象部分所提供的接口可以完全不一样;而且实现部分内部、抽象部分内部的接口也完全可以不一样。但是实现部分要提供类似的功能才行。

使用环境与优势

由上面我们分析得来的桥梁模式,可以看出来桥梁模式应该适用于以下环境:

  1. 当你的系统中有多个地方要使用到类似的行为,或者是多个类似行为的组合时,可以考虑使用桥梁模式来提高重用,并减少因为行为的差异而产生的子类。

  2. 系统中某个类的行为可能会有几种不同的变化趋势,为了有效的将变化封装,可以考虑将类的行为抽取出来。

  3. 当然上面的情况也可以是这样,行为可能要被不同相似类使用,也可以考虑使用桥梁模式来实现。

桥梁模式使用了低耦合性的组合代替继承,使得它具备了不少好处:

  1. 将可能变化的部分单独封装起来,使得变化产生的影响最小,不用编译不必要的代码。

  2. 抽象部分和实现部分可以单独的变动,并且每一部分的扩充都不会破坏桥梁模式搭起来架子。

  3. 对于客户程序来说,你的实现细节是透明的。

可以把桥梁模式当作帮助你编码前端和后端独立变化的框架。

扩展

在《设计模式》一书中提到了使用抽象工厂模式来创建和配置一个桥梁模式。在上面的例子中也使用到了工厂方法模式来得到具体的实现部分。

http://www.lbrq.cn/news/2638207.html

相关文章:

  • 莱芜做网站的商家有哪些常德今日头条新闻
  • 最便宜网站推广公司产品
  • 网站的主题网站浏览器
  • 沈阳网站做app推广公司
  • ubuntu server wordpress石家庄seo网站管理
  • 免费推广seo本溪seo优化
  • 靖江网站微信营销软件免费版
  • 龙岩电商公司seo搜索引擎排名优化
  • 合肥晨曦网站建设互联网营销师证书
  • 鞍山建设工程信息网站武汉推广服务
  • 怎么做创业网站爱站工具
  • 重庆做商城网站设计免费建网页
  • 用.net core 做网站google chrome
  • 泰州网站建设服务热线论文关键词
  • 网站建设 自己的服务器电商推广
  • 自己做的网站响应速度慢百度推广的步骤
  • 深圳方维网站建设seo顾问服务 乐云践新专家
  • 专业做网站咨询seo点击排名器
  • 了解网站建设企业seo整站优化方案
  • 二级域名购买平台优化设计英语
  • 成都微信网站建设多少优化关键词方法
  • 上海景点排名前十久久seo综合查询
  • 域名解析网站建设少女长尾关键词挖掘
  • 校园超市网站开发背景百度正版下载并安装
  • app制作网站有哪些 请列举网站及搜索引擎优化建议
  • 合肥++网站建设莆田seo
  • 宁波网页网站制作离我最近的广告公司
  • 购物网站哪个质量好电商培训机构有哪些哪家比较好
  • 东莞塘厦网站制作线上推广方案怎么写
  • jsp 网站开发教程新网站百度收录
  • centos出现ping: baidu.com: 未知的名称或服务问题
  • 全球化2.0 | 泰国IT服务商携手云轴科技ZStack重塑云租赁新生态
  • 进阶向:Python开发简易QQ聊天机器人
  • 鼠标下滑时回跳问题
  • Claude Code实战体验:AI智能编程助手如何重塑开发工作流?
  • Spring AI 系列之三十六 - Spring AI Alibaba-nl2sql