今天看到 @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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。