桥接模式与解耦合
桥接模式
有一个需求,要对一个组件实现鼠标滑过特效,但组件内部有很多元素,每个元素滑过的特效可能有一定的共同点,此时我们可以将共同点抽象出来
例:
function changeColor(dom, color, bg){ dom.style.color = color dom.style.background = bg }
然后,可以用一个匿名回调函数构建事件与业务的桥梁,降低耦合度,不要直接将changeColor作为事件的回调函数,否则就没有意义了,因为又耦合了
HTML:第一个span滑过要有特效,第二个span滑过时,内部的第三个span要有特效
<body> <span>111111</span><br> <span> <span>9999999</span> <span>9999999</span> <span>9999999</span> <span>9999999</span> <span>9999999</span> </span><br> <span>111111</span> </body>
JS
const spans = document.getElementsByTagName("span") spans[0].onmouseover = function(){ changeColor(this, "red", "#ddd") } spans[0].onmouseout = function(){ changeColor(this, "#333", "#ffffff") } // 当只有组件内部某个元素需要绑定特效时 spans[1].onmouseover = function(){ changeColor(this.getElementsByTagName("span")[2], "red", "#ddd") } spans[1].onmouseout = function(){ changeColor(this.getElementsByTagName("span")[2], "#333", "#ffffff") }
多元化对象
当我们创建一些对象,他们之间部分功能是相同的,但部分功能是不同的,将需要的每个抽象功能桥接在一起,这样就互不影响且降低了耦合度
功能:
// 运动功能 function Speed(x, y){ this.x = x this.y = y } Speed.prototype.run = function(){ console.log("运动") } // 着色功能 function Color(cl){ this.color = cl } Color.prototype.draw = function(){ console.log("绘制色彩") } // 变形功能 function Shape(sp){ this.shape = sp } Shape.prototype.change = function(){ console.log("改变形状") } // 说话功能 function Speek(wd){ this.word = wd } Speek.prototype.say = function(){ console.log("书写") }
实现类:
// 创建一个球的类,可以运动,可以着色 function Ball(x, y, c){ this.speed = new Speed(x, y) this.color = new Color(c) } Ball.prototype.init = function(){ this.speed.run() this.color.draw() } // 创建一个人的类,可以运动,可以说话 function People(x, y, f){ this.speed = new Speed(x, y) this.font = new Speek(f) } Ball.prototype.init = function(){ this.speed.run() this.font.say() } // 创建一个精灵的类,可以运动,可以着色,可以改变形状 function Spirite(x, y, c, s){ this.speed = new Speed(x, y) this.color = new Color(c) this.shape = new Shape(s) } Spirite.prototype.init = function(){ this.speed.run() this.color.draw() this.shape.change() }
当我们创建一个人时,直接实例化一个人的类,这样就可以说话运动了
const p = new People(10, 12, 16) p.init()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器