资讯专栏INFORMATION COLUMN

「mixin模式」与「装饰器模式」

陆斌 / 755人阅读

摘要:今天看到的提问关于装饰模式引发的思考又想起了。其实,模式就是装饰器模式。这就造成了和装饰器模式的一个本质不同基于类,还是基于对象。

今天看到 @chengxuyuan_329633 的提问 关于装饰模式引发的思考 又想起了 mixin。mixin 模式和装饰器模式很相似。

其实,mixin模式就是装饰器模式

那么单利模式呢?呵呵,其实就是全局变量/对象。

当过程式开发变得越来越复杂,代码越难以维护,于是,出现了软件危机,解决软件的危机的方式是什么呢?新的开发模式,也就是 OO,面向对象。

但是面向对象是银弹吗?至少最开始的时候是,很多极端的语言说自己是纯OO,一切都是对象,看似很完美,但是很多东西根本就不需要用对象的,而且频繁产生对象也是一件麻烦事,还有些对象整个软件周期内只要一个就可以了,比如数据库连接池,或者 sun 对象(毕竟太阳只有一个),但是 OO 的思想迫使他们不能使用全局变量,于是,聪明的 OOer 们开始想办法,挖空心思的琢磨了几天几夜,终于灵光一闪,哇,可以这样这样这样……如此如此如此…… 于是 OOer 们就给他起了一个高端的名字:单利模式

mixin 也是这种情况,他最开始出现在动态语言,说的具体点,主意是哪些另类 OO 语言,即没有类的 OO 语言,比如 js。这就造成了 mixin 和装饰器模式的一个本质不同:基于类,还是基于对象。

mixin 直接修改对象的属性,将两个对象 mixin 在一起。而装饰器模式不是,装饰器模式所依赖的类是固定的,而且需要很多很多很多,这样才可以在创建对象是,用不同的类(主意是类,不是对象)来装饰这个新对象。

附:前几天翻译了一篇关于javascript的mixin文章:http://justjavac.com/javascript/2012/12/11/are-your-mixins-ecmascript-5-compatible.html

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77985.html

相关文章

  • 装饰模式的应用:react高阶组件和ES6 装饰

    摘要:装饰者模式参与者装饰者和被装饰者共同的父类,是一个接口或者抽象类,用来定义基本行为定义具体对象,即被装饰者抽象装饰者,继承自,从外类来扩展。三装饰器高阶组件可以看做是装饰器模式在的实现。 一 装饰者模式 优先使用对象组合而不是类继承。 --《设计模式》 1.什么是装饰者模式 定义:动态的给对象添加一些额外的属性或行为。相比于使用继承,装饰者模式更加灵活。 2.装饰者模式参与者 Co...

    YuboonaZhang 评论0 收藏0
  • 装饰模式装饰

    摘要:从装饰模式到装饰器装饰模式装饰模式的作用是在不修改原有的接口的情况下,让类表现的更好。它是一个语法糖说完了装饰模式,我们再看一下在中最新引入的装饰器。 从装饰模式到装饰器 装饰模式 装饰模式的作用是:在不修改原有的接口的情况下,让类表现的更好。 什么叫更好? 为什么需要装饰模式 自然是继承有一些问题继承会导致超类和子类之间存在强耦合性,当超类改变时,子类也会随之改变; 超类的内...

    monw3c 评论0 收藏0
  • JS 装饰,一篇就够

    摘要:的装饰器中的同样借鉴了这个语法糖,不过依赖于的方法。等同于也就是说,装饰器是一个对类进行处理的函数。别名或装饰器在控制台显示一条警告,表示该方法将废除。有了装饰器,就可以改写上面的代码。 更多文章,请在Github blog查看 在 ES6 中增加了对类对象的相关定义和操作(比如 class 和 extends ),这就使得我们在多个不同类之间共享或者扩展一些方法或者行为的时候,变得并...

    learning 评论0 收藏0
  • JavaScript设计模式装饰模式

    摘要:原文博客地址装饰器模式为对象添加新功能不改变其原有的结构和功能。手机壳就是装饰器,没有它手机也能正常使用,原有的功能不变,手机壳可以减轻手机滑落的损耗。 原文博客地址:https://finget.github.io/2018/11/22/decorator/ 装饰器模式 为对象添加新功能;不改变其原有的结构和功能。 手机壳就是装饰器,没有它手机也能正常使用,原有的功能不变,手机壳可以...

    tangr206 评论0 收藏0
  • Decorator:从原理到实践,我一点都不虚~

    摘要:描述符必须是这两种形式之一不能同时是两者。可以是任何有效的值数值,对象,函数等。当且仅当该属性的为时,才能被赋值运算符改变。特点就是不影响之前对象的特性,而新增额外的职责功能。 前言 原文链接:[Nealyang/personalBlog]() showImg(https://segmentfault.com/img/remote/1460000018958861); ES6 已经不必...

    XanaHopper 评论0 收藏0

发表评论

0条评论

陆斌

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<