原文出处及讨论:http://www.blogjava.net/calvin/archive/2005/11/01/17678.html
作者:江南白衣
《Modern C++ Design》里的Policy-Base Class是Cpper得意的一样事情;
Spring 式IoC container 的依赖注入是Javaer得意的一样事情;
Ruby的Mixin特性是Rubyer得意的一样事情。
有趣的是,各自得意的事情,指向的是同一个问题:多重行为的组合。
1 .Policy-Base是混合使用模板与C++的多重继承达成的:
最终类多重继承模版类,由模版传入实际的行为类(Policy Class)。
template <class CheckingPolicy>
class SmartPtr : public CheckingPolicy
{...};
typedef SmartPtr<NoChecking> noCheckPtr;
上段代码,在编译期把NoChecking类传入到SmartPtr中,组合成noCheckPtr类。而实战中,还会用到"template template parameter"....
2 .Java则紧守最古老的委托模式来达成:
最终类拥有实际施行各种行为的行为类的指针。所有最终类的方法都将委托给行为类来执行。如果行为多样时,采用基于接口编程。同时利用Java的反射特质,用IOC Container根据配置实现注入的自动化。
3. Ruby则倚仗自己的动态特性,直接在语言中内建了Mixin特性。
module Greetable
def greet
puts "Your age is, " + self.age
end
end
class Person
include Greetable
def initialize(name, age)
@name=name
@age=age
end
attr_reader :age
end
person=Person.new("Bruce",40)
person.greet
Your age is 40.
此段代码将Greetable类Minxin进了Person类里头,让其拥有了greet方法。
也多亏了Ruby的动态性,让Greetable可以打印一个自身毫不知情的,其实属于Person的属性age.
就因为同一样事情还有着C++模板、传统Delegate和新兴动态Minxin的选择,让我们这些工蚁,还觉得有些许的自由和左顾右盼的乐趣。
分享到:
相关推荐
var MyMixin = mixin.create('MyMixin', { // some methods and maybe some state? }); 这将创建一个具有定义状态/功能的 mixin 对象。 应用混入 var Person = function Person(name) { this.rename(name); }; ...
"Mixin.one::information: 网站和 Mixin 网络浏览器" 这个标题提到了两个关键概念:Mixin.one 和 Mixin 网络浏览器。Mixin.one 可能是一个基于互联网的平台或者服务,而 Mixin 网络浏览器则可能是该平台的一部分,...
从 Vue.mixin 入手,源码位置在 /src/core/global-api/mixin.js。 ```javascript export function initMixin (Vue: GlobalAPI) { Vue.mixin = function (mixin: Object) { this.options = mergeOptions(this....
【前端项目-universal-mixin.zip】是一个针对前端开发的压缩包,其主要目的是提供一个跨JavaScript引擎的混合(mixin)解决方案,使开发者能够在旧的、现代的以及未来的JavaScript环境中编写兼容性强、轻量级的特性...
supergroup.mixin.one是“ Mixin中文群”的源代码,它是基于Mixin bot的无限成员组。 注意 !!! 在升级组之前,请先签出 。 准备 将./config/config.tpl.yaml复制到./config/config.yaml 替换config.yaml配置,...
作者在书中提及了一些重要的编程概念,如Curiously Recurring Template Pattern(好奇递归模板模式)、Mixin继承、以及属性(Properties)等,这些都是C++编程中的高级特性。同时,书中也讲述了设计原则,特别是...
ruby-destroyed_at, 用于安全销毁的ActiveRecord Mixin DestroyedAt 查找帮助?如果是一个 Bug ,请在GitHub上打开一个问题。安装将 destroyed_at gem 添加到 Gemfilegem 'destroyed_at'你可以在每个模块中
modernizr-mixin, 在Sass中,针对测试的简单而全面的mixin hardwarebutton混合 一种简单的DRYier测试方法,在Sass中更快更。安装要求 ruby 3.4或者 LibSass 3.2Libsass警告:在 Libsass 3.2.3中有一个已知 Bug,它...
用于mixin.one的Node.js SDK 按照mixin开发人员文档创建您的mixin应用。 单击按钮“单击以生成新的会话”。 现在,您将拥有机器人会话的秘密。 6位数字是您的资产PIN。UUID是新的会话ID。第三行是加密的PIN_TOKEN...
Mixin 是 Ruby 中的一种特殊机制,用于模拟多重继承的效果。通过将模块混入到类中,可以让类获得模块中的方法和属性。 **示例代码**: ```ruby module Movable def move(x, y) # 实现移动逻辑 end end class ...
mixin.js 一个小型库,用于使用基于mixins的有用继承来创建功能强大的工厂。 受React.js的createClass工厂方法的启发。 var MyLib . classFactory = mixin ( { getInitialState : mixin . policy . method . MERGE_...
如何创建应用并获取Mixin Messager用户的access_token: : Mixin Network的API文档 沟通 电报组: : Mixin新闻 日志: : 阻止信息: : 推特: : 面子书: : YouTube: ...
awesome_print, 在全彩色和适当的缩进,漂亮的打印你的ruby 对象 的出色打印 Awesome Print是一个 ruby 库,它可以在完整颜色中打印 ruby 对象,以适当的缩进显示它的内部结构。 Rails 对象和 Rails 模板中的用法...
这种约束简化了类设计并避免了多态数组(matlab.mixin.Heterogeneous)。 元胞数组或结构可用于聚合标量对象。 Scalar 类通过“(...)”索引禁用对象数组的构造, 通过串联(cat、vertcat、horzcat)或使用“空”...
Ruby是一种强大的、面向对象的编程语言,以其简洁的语法和注重开发者生产力的设计理念而闻名。在"ruby.rar"这个压缩包中,包含了三本中文教程,可以帮助初学者和经验丰富的开发者深入理解Ruby语言的核心概念和高级...
8. **模块化编程**:Ruby的模块系统支持命名空间和混合(mixin),通过`include`或`extend`关键字,模块可以被纳入类中,实现代码的复用和组织。 9. **闭包**:Ruby中的Blocks、Procs和Lambdas都具有闭包特性,能...
以下是一些解决这个问题的方法和SCSS的`mixin`使用详解。 首先,让我们回顾一下`mixin`的基本语法。在SCSS中,你可以这样定义一个`mixin`: ```scss @mixin my-mixin($color) { color: $color; font-weight: ...
Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而闻名。本"Ruby学习指南"旨在帮助初学者快速掌握Ruby的基础知识,同时也为有一定经验的开发者提供深入学习的资源。 1. **Ruby...
Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而闻名。这份"Ruby中文文档.CHM"是针对初学者的宝贵资源,它将帮助你全面了解并掌握Ruby语言的基础和高级特性。 1. **Ruby语言...
19-Mixin混入