JavaScript设计模式-装饰器模式(4)

简介: JavaScript设计模式-装饰器模式(4)

今天我们来讲一下装饰器设计模式,装饰器设计模式指的是希望在不改变原对象的基础上,通过对该对象功能或属性的拓展来实现更复杂的逻辑处理。

装饰器设计案例


商场里面有卖衣服和装饰品的,如果用户在购买好自己心仪的衣服后,在此衣服基础上在购买一些装饰品打扮自己,比如项链18万元,耳坠9万元,手表35万元等等;

我们现在用非装饰器设计模式和装饰器设计模式进行实现,进行对比该区别

非装饰器设计模式实现


我们先声明一个构造函数,然后在构造函数的原型上,添加装饰品的属性和价格方法,通过new关键字创建出来实例,实例调用装饰品添加的方法,对实例进行添加其属性和价格并进行计算

// 声明一个构造函数,该构造函数是用户去购买衣服后的操作
        function Strike() {
            this.price = true;
        }
        // 给构造函数上面添上方法
        Strike.prototype = {
            // 项链方法
            addNecklace: function () {
                // 添加上项链标记
                this.hasNecklace = true;
                // 项链价格
                this.price += 18;
            },
             // 耳坠方法
             addEarrings: function () {
                // 添加上耳坠标记
                this.hasEarrings = true;
                // 耳坠价格
                this.price += 9;
            },
              // 手表方法
              addSurface: function () {
                // 添加上手表标记
                this.hasSurface = true;
                //手表价格
                this.price += 35;
            }
        }
        // 我们现在来创建实例,也就是相当于我们购买衣服后的操作
        const car=new Strike();
        console.log('当前购买装饰品价位为',car.price);
        // 购买项链
        car.addNecklace();
        // 购买手表
        car.addSurface();
        // 购买耳坠
        car.addEarrings();
        console.log('购买完装饰品的价格为',car.price);

装饰器设计模式实现


抽离挂载到构造函数原型上的方法,装饰品方法抽离后,他需要接收一个参数,该参数是使用new关键字对其构造函数使用创建出来的实例,装饰品方法接收后,对其实例进行添加属性和装饰品价格并计算

// 声明一个构造函数,该构造函数是用户去购买衣服后的操作
        function Strike() {
            this.price = true;
        }
        // 项链方法
        function addNecklace(info) {
                // 添加上项链标记
                info.hasNecklace = true;
                // 项链价格
                info.price += 18;
            }
        // 手表方法
        function  addSurface(info) {
                // 添加上手表标记
                info.hasSurface = true;
                //手表价格
                info.price += 35;
            }
        // 耳坠方法
        function addEarrings(info) {
                // 添加上耳坠标记
                info.hasEarrings = true;
                // 耳坠价格
                info.price += 9;
            }
        // 我们现在来创建实例,也就是相当于我们购买衣服后的操作
        const car=new Strike();
        // 购买项链
        addNecklace(car);
        // 购买手表
        addSurface(car);
        // 购买耳坠
        addEarrings(car);
        console.log('购买完装饰品的价格为',car.price);

装饰器设计模式和非装饰器设计模式的区别


  1. 非装饰器设计模式是把封装好的属性都写在了原型上面,而装饰器设计模式是把属性都封装成了一个方法,我们通过new关键字创建过后的实例传递给方法,让方法对实例进行一些方法和属性的增加
  2. 装饰器设计模式没有破坏或者修改构造函数,即使以后有新的配置和功能出现需要我们去实现,我们可以去创建一个功能函数进行完成,这样子减少了对构造函数的修改和介入,非装饰器设计模式我们有了新的的配置和功能,都要对去构造函数进行修改,长久以往,代码维护性会变差,构造函数原型也会变得臃肿

在一些情况下不希望去修改其构造函数,但是希望去拓展其功能或者属性进行实现更加逻辑的时候,就可以采用装饰器设计模式

坚持努力,无惧未来!


相关文章
|
1月前
|
设计模式 数据安全/隐私保护
Next.js 实战 (七):浅谈 Layout 布局的嵌套设计模式
这篇文章介绍了在Next.js框架下,如何处理中后台管理系统中特殊页面(如登录页)不包裹根布局(RootLayout)的问题。作者指出Next.js的设计理念是通过布局的嵌套来创建复杂的页面结构,这虽然保持了代码的整洁和可维护性,但对于特殊页面来说,却造成了不必要的布局包裹。文章提出了一个解决方案,即通过判断页面的skipGlobalLayout属性来决定是否包含RootLayout,从而实现特殊页面不包裹根布局的目标。
81 33
|
4月前
|
设计模式 XML Java
【设计模式】装饰器模式(定义 | 特点 | Demo入门讲解)
【设计模式】装饰器模式(定义 | 特点 | Demo入门讲解)
49 0
|
2月前
|
设计模式 前端开发 JavaScript
前端必须掌握的设计模式——装饰器模式
装饰器模式是一种结构型设计模式,通过创建新类来包装原始对象,实现在不修改原有结构的前提下扩展新行为。其核心在于“组合”思想,使新功能可“即插即拔”。该模式具有解耦性、灵活性和动态性等特点,广泛应用于类的面向对象编程语言中,如JavaScript的注解和TypeScript的写法。示例中,通过装饰器模式为游戏角色动态添加装备,展示了其强大的扩展性和灵活性。
|
3月前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
53 2
|
4月前
|
设计模式 JavaScript 前端开发
JavaScript设计模式--访问者模式
【10月更文挑战第1天】
47 3
|
5月前
|
设计模式 Java
Java设计模式-装饰器模式(10)
Java设计模式-装饰器模式(10)
|
6月前
|
设计模式 JavaScript 前端开发
从工厂到单例再到策略:Vue.js高效应用JavaScript设计模式
【8月更文挑战第30天】在现代Web开发中,结合使用JavaScript设计模式与框架如Vue.js能显著提升代码质量和项目的可维护性。本文探讨了常见JavaScript设计模式及其在Vue.js中的应用。通过具体示例介绍了工厂模式、单例模式和策略模式的应用场景及其实现方法。例如,工厂模式通过`NavFactory`根据用户角色动态创建不同的导航栏组件;单例模式则通过全局事件总线`eventBus`实现跨组件通信;策略模式用于处理不同的表单验证规则。这些设计模式的应用不仅提高了代码的复用性和灵活性,还增强了Vue应用的整体质量。
90 1
|
6月前
|
设计模式 JavaScript 前端开发
小白请看 JS大项目宝典:设计模式 教你如何追到心仪的女神
小白请看 JS大项目宝典:设计模式 教你如何追到心仪的女神
|
7月前
|
设计模式 JavaScript Go
js设计模式【详解】—— 状态模式
js设计模式【详解】—— 状态模式
106 7
|
7月前
|
设计模式 JavaScript
js设计模式【详解】—— 桥接模式
js设计模式【详解】—— 桥接模式
90 6

热门文章

最新文章