前端佬们,装起来!给设计模式【祛魅】

已经有一段时间懵的状态,也确实不知道写啥~现在满屏的都是LLM(大语言模型)的新闻,让前端佬(我)瑟瑟发抖。

以后拼啥呢?

拼能装!

论人类装X,AGI来也得服!

今天就跟前端佬们装一波,搞一搞设计模式。

1. 工厂模式

论起工厂模式,其实各位前端佬真的完全可以BS。看下面示例

js 复制代码
function 摸鱼(){
   switch(type){
      case 1 :
        return new 看掘金();
        break;
      case 2 :
         return new 打游戏();
        break;
      case 3 :
         return new 听音乐();
        break;
      case 4 :
         return new 扒新闻();
        break;
      case 5 :
         return new 蹲坑();
        break;
       default:
         reutrn new 干瞪眼();
   }
}

上面函数就是用工厂模式。但如果要是下面这么写,又不算是工厂模式了。

js 复制代码
function 摸鱼(type){
   switch(type){
      case 1 :
        看掘金();
        break;
      case 2 :
         打游戏();
        break;
      case 3 :
         听音乐();
        break;
      case 4 :
        扒新闻();
        break;
      case 5 :
         蹲坑();
        break;
       default:
         干瞪眼();
   }
}

其实工厂模式是那些静态类型语言,创建对象时,不需要那么频繁的写new xxx,而且也能够将一些同业务的类封装一起,达到在使用时对创建一个对象的依赖,遵循依赖倒置原则。

咋样。够装了吧~

2. 单例模式

单例其实最简单。中间思想就是,不管你怎么调用,只会创建一个,有且只有一个。上代码:

js 复制代码
window["摸鱼"] = {
    看掘金:function(){
        console.log('涨知识')
    }
}

JavaScrip实现单例就是这么骚气。做的高级点,现在可以做一些属性保护,只能通过方法来改变他。

js 复制代码
// 深度代理增强版 --- 注:AI编写
const createDeepProxy = (obj, check) => {
  return new Proxy(obj, {
    set(target, prop, value) {
      if (typeof value === 'object' && value !== null) {
        value = createDeepProxy(value, check)
      }
      return check(target, prop, value)
    },
    get(target, prop) {
      const value = Reflect.get(target, prop)
      if (typeof value === 'object' && value !== null) {
        return createDeepProxy(value, check)
      }
      return value
    }
  })
}

3. 策略模式

这种模式,在JavaScrip写法中可谓是遍地开花。举列如下:

js 复制代码
const  摸鱼 = {
    看掘金:function(){
        console.log('涨知识')
    },
    蹲坑:function(){
        console.log('脚麻')
    },
    打游戏:function(){
        console.log('手酸')
    }
}

策略模式的官方定义是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。说实话,完全看不懂。我理解的策略模式,就是能把一些毫不关联的业务都能集合在一起,方便集合管理和调用。这里见仁见智了~

4. 装饰者模式

一提起这个模式,我就有点忍不住想笑。先来例子:

js 复制代码
function 屎山代码(){
// 里面一万行代码
}
屎山代码() // =>完成了【摸鱼】功能

假设上面的屎山代码函数,主要实现了一个摸鱼功能。后面来了一个要求,需要让这个函数再实现【干人】功能。 面对这种情况,咱肯定不能改代码啊!一定得往里面再加代码。

js 复制代码
function _new屎山代码(){
    屎山代码()
    干人()
}
_new屎山代码() // =>完成了【摸鱼】【干人】功能

完美,这就是传说中装饰者模式。

WOW~已经写了好多了。有机会再侃侃其它的。上面只是举例了几个设计模式侃侃,没有那么重视形式,但自认为精髓都在。

欢迎各位大佬讨论~

也欢迎各位大佬不吝指教我一定改

相关推荐
TheITSea1 小时前
JavaScript Web APIs
开发语言·前端·javascript
恋猫de小郭1 小时前
Android CLI 支持 AI Agent 通过 Device Streaming 调试云真机
android·前端·flutter
Wang's Blog1 小时前
Java 项目实战: 外卖平台优化-前端dist部署与Nginx反向代理rewrite
java·前端·nginx
鬓戈1 小时前
Claude Code frontend-design 插件调研 与 Vue 旧系统风格一致性方案
前端·vue.js·人工智能
开开心心就好1 小时前
以图搜图找重复图片,本地工具离线就能用
javascript·智能手机·ffmpeg·c#·ocr·word·音视频
IT_陈寒1 小时前
SpringBoot自动配置的坑我帮你踩过了
前端·人工智能·后端
企业数字化笔记1 小时前
视频局部合成怎么做得自然?掩膜修复、边缘羽化、时序稳定与背景替换
java·javascript·音视频
其实防守也摸鱼2 小时前
网安自测题:掌握核心知识点的实用练习
linux·运维·服务器·前端·数据库·sql·xss
liangshanbo12154 小时前
JavaScript 面试题:Object.keys() 的返回顺序是无序的吗?
开发语言·javascript·ecmascript
geovindu4 小时前
css: Timeline scribble
前端·css·iphone