前端开发中常用的几种设计模式(二)

简介: 前端开发中常用的几种设计模式

装饰器参数的形式

@testDec(false)
class Demo {
}
function testDec(isDec) {
    return function (target) {
        target.isDec = isDec
    }
}
console.log(Demo.isDec);

验证是否是一个真正的装饰器模式需要验证以下几点:

1. 1.将现有对戏那个和装饰器进行分离,两者独立存在
2. 2.符合开放封闭原则

2. 适配器模式

适配器模式:旧接口格式和使用者不兼容,中间加一个适配转换接口。

比如国外的插座跟国内的插座不一样,我们需要买个转换器去兼容。

20210817210317428.png

上代码:

class Adaptee {
    specificRequest() {
        return '德国标准的插头';
    }
}
class Target {
    constructor() {
        this.adaptee = new Adaptee();
    }
    request() {
        let info = this.adaptee.specificRequest();
        return `${info} -> 转换器 -> 中国标准的插头`
    }
}
// 测试
let client = new Target();
client.request();

结果:

德国标准的插头 -> 转换器 -> 中国标准的插头

场景上可封装旧接口:

// 自己封装的ajax,使用方式如下:
ajax({
    url: '/getData',
    type: 'Post',
    dataType: 'json',
    data: {
        id: '123'
    }
}).done(function(){
})
// 但因为历史原因,代码中全都是:
// $.ajax({...})

这个时候需要一个适配器

// 做一层适配器
var $ = {
    ajax: function (options) {
        return ajax(options)
    }
}

3. 代理模式

代理模式:使用者无权访问目标对象,中间加代理,通过代理做授权和控制。

明星经纪人:比如有个演出,要请明星,要先联系经纪人。

或者理解为:为一个对象提供一个代用品或者占位符,以便控制对它的访问。例如图片懒加载、中介等。

20210817214325882.jpg

/**
 * pre:代理模式
 * 小明追求A,B是A的好朋友,小明比不知道A什么时候心情好,不好意思直接将花交给A,
 * 于是小明将花交给B,再由B交给A.
 */
// 花的类 
class Flower{
    constructor(name){
        this.name = name 
    }
}
// 小明拥有sendFlower的方法
let Xioaming = {
    sendFlower(target){
        var flower = new Flower("玫瑰花")
        target.receive(flower)
    }
}
// B对象中拥有接受花的方法,同时接收到花之后,监听A的心情,并且传入A心情好的时候函数
let B = {
    receive(flower){
        this.flower =flower
        A.listenMood(()=>{
            A.receive(this.flower)
        })
    }
}
// A接收到花之后输出花的名字
let A = {
    receive(flower){
        console.log(`A收到了${flower.name} `)
        // A收到了玫瑰花 
    },
    listenMood(func){
        setTimeout(func,1000)
    }
}
Xioaming.sendFlower(B)

虚拟代理用于图片的预加载

图片很大,页面加载时会空白,体验不好,所以我们需要个占位符,来短暂替代这个图片,等图片加载好了放上去。

let myImage = (function(){
    let img = new Image
    document.body.appendChild(img)
    return {
        setSrc:(src)=>{
            img.src = src
        }
    }
})()
let imgProxy =(function(){
    let imgProxy = new Image
    // 这个地方我使用了setTimeout来增强演示效果,否则本地加载太快,根本看不到。
    imgProxy.onload=function(){
        setTimeout(()=>{
            myImage.setSrc(this.src)
        },2000)
    }
    return (src)=>{
        myImage.setSrc("../../img/bgimg.jpeg")
        imgProxy.src=src
    }
})()
imgProxy("../../img/background-cover.jpg")

ES6 Proxy

其实在ES6中,已经有了Proxy,这个内置的函数。我们来用一个例子来演示一下他的用法。这是一个明星代理的问题。

let star={
    name : "张XX",
    age:25,
    phone : "1300001111"
}
let agent = new Proxy(star,
    {
        get:function(target,key){
            if(key === "phone"){
                return  "18839552597"
            }else if(key === "name"){
                return "张XX"
            }else if(key === "price"){
                return "12W"
            }else if(key === "customPrice"){
                return target.customPrice
            }
        },
        set:function(target,key,value){
            if(key === "customPrice"){
                if(value < "10"){
                    console.log("太低了!!!")
                    return false
                }else{
                    target[key] = value
                    return true
                }
            }
        }
    }
)
console.log(agent.name)
console.log(agent.price)
console.log(agent.phone)
console.log(agent.age)
agent.customPrice = "12"
console.log(agent)
console.log(agent.customPrice)

设计原则验证

代理类和目标类分离,隔离开目标类和使用者

符合开放封闭原则

相关文章
|
6月前
|
设计模式 前端开发 开发者
探索现代前端开发中的设计模式
在现代前端开发中,设计模式是一种重要的工具,它可以帮助开发者提高代码的可维护性、可扩展性和可重用性。本文将介绍几种常见的设计模式,并探讨它们在前端开发中的应用。
|
6月前
|
设计模式 存储 缓存
精进前端开发:深入探讨前端设计模式
精进前端开发:深入探讨前端设计模式
69 0
|
6月前
|
设计模式 前端开发 算法
前端工程中的设计模式应用(下)
前端工程中的设计模式应用(下)
|
6月前
|
设计模式 存储 前端开发
JS的几种设计模式,Web前端基础三剑客学习知识分享,前端零基础开发
JS的几种设计模式,Web前端基础三剑客学习知识分享,前端零基础开发
|
设计模式 前端开发 数据安全/隐私保护
前端实现设计模式之状态模式
状态模式是一种行为型设计模式,用于在对象内部状态发生变化时改变其行为。状态模式将对象的行为封装在不同的状态类中,使得对象在不同的状态下可以有不同的行为。在前端开发中,状态模式常用于管理组件的状态和行为,以实现复杂的交互逻辑。本文将介绍状态模式的概念和应用,并提供具体的代码示例和解读。
164 0
|
6月前
|
设计模式 前端开发 JavaScript
从设计模式看前端开发中的数据管理
【2月更文挑战第2天】在前端开发中,合理的数据管理是至关重要的。本文将从设计模式的角度出发,探讨在前端开发中如何应用设计模式来优化数据管理,提高代码质量和可维护性。
71 0
|
6月前
|
设计模式 前端开发 算法
前端工程中的设计模式应用(上)
前端工程中的设计模式应用(上)
|
6月前
|
设计模式 存储 缓存
前端工程中的设计模式应用(中)
前端工程中的设计模式应用(中)
|
11月前
|
设计模式 存储 缓存
精进前端开发:深入探讨前端设计模式
精进前端开发:深入探讨前端设计模式
58 1
|
设计模式 JSON 前端开发
前端面试必看(手写Promise+js设计模式+继承+函数柯里化等)JavaScript面试全通关(1/3)
前端面试必看(手写Promise+js设计模式+继承+函数柯里化等)JavaScript面试全通关(1/3)
74 0
下一篇
无影云桌面