`

mixin 模式看起来好像装饰器模式,究竟是一个什么样的模式

 
阅读更多

mixin模式就是装饰器模式

 

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

 

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

 

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

 

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

 

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

 

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

1
8
分享到:
评论

相关推荐

    Mixin,MIXIN是使用ASM的Java的特性/混合框架.zip

    Mixin框架是Java编程语言中的一个开源项目,它利用ASM库来实现对类的低级别修改,也就是所谓的"混合"(Mixins)。这个框架的核心概念是将功能或行为注入到目标类中,而无需继承或者使用代理模式。在游戏开发、模块化...

    动态代理的5模式使用示例和Mixin模式

    本文简单描述了5种代理生成模式和1种Mixin模式,最后给出一个示例。 代码如下:public interface IPlayable { void Play(); }  public class Animal : IPlayable { public virtual void Play() { 

    使用Mixin设计模式进行Python编程的方法讲解

    Python的Mixin模式可以通过多继承的方式来实现, 举例来说,我们自定义一个简单的具有嵌套结构的数据容器: class SimpleItemContainer(object): def __init__(self, id, item_containers): self.id = id self....

    mixin白皮书

    mixin是一个闪电交易快速的点点对的数字交道项目,它拥有非常好的技术栈。

    ymixin是来自阅文前端团队的CSS预处理器mixin库

    例如,一个常见的mixin可能是创建一个简单的边框圆角效果: ```scss @mixin border-radius($radius) { border-radius: $radius; } .my-element { @include border-radius(5px); } ``` 在这个例子中,`border-...

    小程序mixin混入Page选项合并

    `mixin` 是 JavaScript 中的一个设计模式,它允许我们将一组相关的方法或属性组合在一起,形成一个混入对象。在微信小程序中,`mixin` 可以包含数据(data)、生命周期方法、事件处理函数等,可以被多个页面或组件...

    外文翻译:学用JavaScript设计模式

    - **装饰模式**:动态地给一个对象添加一些额外的职责,就增加功能而言,装饰模式相比生成子类更加灵活。 - **亨元(Flyweight)模式**:用于减少创建大量相似对象所需的内存消耗。 #### JavaScript MV* 模式 随着...

    前端开源库-event-emitter-mixin

    "event-emitter-mixin"是一个专为前端设计的开源库,它实现了事件发射器(Event Emitter)的混合功能,并且采用了ES7的装饰器(Decorator)语法,使得代码更加简洁和易读。 事件发射器(Event Emitter)是软件工程...

    学用 JavaScript 设计模式

    12. 装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。 13. 亨元(Flyweight)模式:是一种结构型设计模式,核心思想是减少共享对象的数量,以减少内存占用和提高性能...

    A Swift mixin for UITableViewCells and UICollectionViewCells.zip

    A Swift mixin for UITableViewCells and UICollectionViewCells.zip,A Swift mixin for reusing views easily and in a type-safe way (UITableViewCells, UICollectionViewCells, custom UIViews, ViewControllers...

    modernizr-mixin, 在Sass中,针对测试的简单而全面的mixin.zip

    modernizr-mixin, 在Sass中,针对测试的简单而全面的mixin hardwarebutton混合 一种简单的DRYier测试方法,在Sass中更快更...安装要求 ruby 3.4或者 LibSass 3.2Libsass警告:在 Libsass 3.2.3中有一个已知 Bug,它使得

    【Java设计模式-源码】好奇递归模板模式(CRTP):独特地利用多态性

    在Java中,好奇递归模板模式(CRTP)是一种强大的设计模式,用于实现静态多态性。通过让一个类模板从其自身类的模板实例化中派生,CRTP能够实现方法...通过在Java中应用好奇递归模板模式(CRTP),可以创建一个基本的

    vue-mixin-decorator-用于强类型混合的Typescript装饰器。-Vue.js开发

    同样来自@ JsonSong89的评论,他建议应将该想法提取到一个单独的项目中,这就是为什么我要这样做的原因。 从vue-property-decorator中偷偷偷窃的项目模板。 最好的情况是此项目/实施/概念被正式支持的项目合并/提供...

    JS自定义混合Mixin函数示例

    Mixin是将一个对象的属性和方法混入到另一个对象中的一种模式,它允许我们把一个类的某些功能复制到另一个类中,而无需建立真正的继承关系。 首先,我们看到一个augment函数的实现,它的目的是为了能够将一个类...

    前端大厂最新面试题-mixin.docx

    首先抽出共同代码,编写一个 Mixin,然后在两个组件中引入 Mixin。 源码分析: 从 Vue.mixin 入手,源码位置在 /src/core/global-api/mixin.js。 ```javascript export function initMixin (Vue: GlobalAPI) { ...

    前端开源库-react-addons-pure-render-mixin

    "react-addons-pure-render-mixin"是React的一个官方加载项,它提供了一个优化性能的策略,特别是在处理大型复杂应用时。 标题中的“react-addons-pure-render-mixin”是React的一个关键特性,用于帮助开发者实现更...

    前端项目-universal-mixin.zip

    【前端项目-universal-mixin.zip】是一个针对前端开发的压缩包,其主要目的是提供一个跨JavaScript引擎的混合(mixin)解决方案,使开发者能够在旧的、现代的以及未来的JavaScript环境中编写兼容性强、轻量级的特性...

    微信小程序开发教程之增加mixin扩展

    我们先看一个很实际的需求: 为所有小程序页面增加运行环境class,以方便做一些样式hack。具体说就是小程序在不同的运行环境(开发者工具|iOS|Android)运行时,platform值为对应的运行环境值(”ios|android|dev

    mixin:JavaScript中的原型mixin构造函数

    而且,它将通知已混合到另一个类中的混合构造函数。 这可用于构造依赖的混合层次结构。 安装 使用npm: npm install mixin 用法: var mixin = require("mixin"); function Foo() { } Foo.prototype = { t1: ...

Global site tag (gtag.js) - Google Analytics