ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

桥接模式与解耦合

2021-12-03 14:32:16  阅读:218  来源: 互联网

标签:function 桥接 模式 color changeColor 耦合 new prototype speed


桥接模式

有一个需求,要对一个组件实现鼠标滑过特效,但组件内部有很多元素,每个元素滑过的特效可能有一定的共同点,此时我们可以将共同点抽象出来

例:

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()

 

标签:function,桥接,模式,color,changeColor,耦合,new,prototype,speed
来源: https://www.cnblogs.com/xt112233/p/15637785.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有