一场关于爱与代理的JS之旅

在这个充满趣味与智慧的JS脱口秀中,我们来聊聊一个既简单又充满魔力的概念------代理模式。想象一下,你是一个精通JS语言的魔术师,你的任务是让代码世界里的交流变得更加巧妙且高效。今天,我们的故事围绕着一场浪漫的送花行动展开,而主角正是我们的老朋友A,他想要给心爱的B送上一束鲜花,但故事远不止这么简单。

一场关于爱与代理的JS之旅

在JS这个充满无限可能的舞台上,A和B不仅仅是两个普通的对象字面量,他们是活生生的角色,拥有自己的属性和方法。就像现实生活中的人们,他们通过特定的接口(方法)相互作用,这正是面向对象编程的魅力所在。A想要通过调用sendFlowers()方法,将这份爱意传递给B。

js 复制代码
const A={
            //null
            girlfriend: null,
            //未定义
            company:undefined,
            //string
            name : 'A',
            //Number
            age:21,
            school :'东华理工',
            hometown : '鹰潭',
            //Boolean
            isSingle: true,
            //函数也是对象
            eating:function(){
                console.log('干饭干饭')
            },
            //形参target
            sendFlower:function(target){
                target.receiveFlower(this)
            }
        }
js 复制代码
const B={
            name : 'B',
            xq:50,
            receiveFlower : function(sender){
                // console.log(this.name+'收到了'+sender.name+'送出的花');
                //代码的可读性
                console.log(`${this.name}收到了${sender.name}送出的花`)
                if(this.xq>=90){
                    console.log('万达走一波')
                }else{
                    console.log('不约,我们不约')
                }
            }
        }

但是,生活总是充满变数,直接送花可能因为种种原因行不通,这时,设计模式中的"代理模式"闪亮登场,成为这场浪漫计划的关键。

代理C的闪亮登场

C,这位神秘的第三方角色,是A的老乡,更重要的是,他愿意伸出援手,成为这场爱情传递的桥梁。在代码世界里,这意味着C实现了与B相同的接口------receiveFlowers()。C并不是简单的中介,他更像是一个精心安排的替身演员,能够完美扮演B的角色,接收并保管这份爱的礼物,直到它能安全送达真正的目的地。

js 复制代码
const C= {
            name: 'C',
            hometown : '鹰潭',
            receiveFlower : function(sender){
                // 代替B收花,实现同样的方法,也就是接口
                // if(sender.name == 'A'){
                //     console.log('A,让我们在一起吧....');
                // }
                if(B.xq<90){
                    console.log('等一等');
                    setTimeout(function(){
                        B.xq=91;
                        B.receiveFlower(sender)
                    },2000)
                }else {
                    B.receiveFlower(sender)
                }
            }
        }

在JS中实现代理模式,就像是编写了一段情商满满的代码。我们不局限于死板的语法,而是运用设计模式,让逻辑更加灵活,充满人性化的考量。C作为B的代理,其存在意义在于隔离复杂性,保护原始对象(B)的同时,保证功能的正常执行。这就像在说:"嘿,即使路途遥远,我也有办法帮你传达心意。"

设计模式

设计模式,尤其是这23种经典模式,它们像是编程界的秘籍,教会我们如何优雅地解决问题。

设计模式主要分为三大类:

  1. 创建型模式:关注对象的创建过程,如单例模式(Singleton)、工厂模式(Factory)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)、原型模式(Prototype)等。这类模式帮助我们管理对象的创建,使得系统更具灵活性并降低耦合度。
  2. 结构型模式:关注如何组合类和对象以获得更大的结构,同时保持结构的灵活和高效,如适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、装饰器模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)、代理模式(Proxy)等。它们通过不同的方式重新组织类的结构,以实现新的功能或改善现有系统的结构。
  3. 行为型模式:关注对象之间的职责分配以及它们之间的通信方式,如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、命令模式(Command)、责任链模式(Chain of Responsibility)、状态模式(State)、访问者模式(Visitor)等。这类模式主要处理对象之间的算法和职责分配问题。

代理模式只是其中之一,但它生动展示了如何在不改变原有接口的情况下,扩展或增强系统的功能。这不仅仅是技术的胜利,更是对"写代码而非写语法"的深刻理解。

结语

在这个JS脱口秀的舞台上,我们见证了代理模式如何以一种既实用又富有创意的方式,解决了A与B之间的"送花难题"。它不仅是一段代码的实现,更是一次关于智慧、创新与情感传递的精彩演绎。记住,无论是在编程还是在生活中,寻找合适的"代理",用情商编码,总能让我们的世界变得更加美好与和谐。下一次,当你面对复杂的代码挑战时,不妨也考虑一下,是否有一位"C"能帮助你更加优雅地完成使命。这就是JS,一门最有表达能力的语言,让我们在编码的旅途中,不断探索,不断创造奇迹。

相关推荐
小飞猪Jay3 小时前
C++面试速通宝典——13
jvm·c++·面试
一路向前的月光3 小时前
Vue2中的监听和计算属性的区别
前端·javascript·vue.js
长路 ㅤ   3 小时前
vue-live2d看板娘集成方案设计使用教程
前端·javascript·vue.js·live2d
Fan_web3 小时前
jQuery——事件委托
开发语言·前端·javascript·css·jquery
Jiaberrr4 小时前
Element UI教程:如何将Radio单选框的圆框改为方框
前端·javascript·vue.js·ui·elementui
安冬的码畜日常6 小时前
【D3.js in Action 3 精译_029】3.5 给 D3 条形图加注图表标签(上)
开发语言·前端·javascript·信息可视化·数据可视化·d3.js
太阳花ˉ6 小时前
html+css+js实现step进度条效果
javascript·css·html
john_hjy7 小时前
11. 异步编程
运维·服务器·javascript
风清扬_jd7 小时前
Chromium 中JavaScript Fetch API接口c++代码实现(二)
javascript·c++·chrome