`
webcode
  • 浏览: 6031524 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Modern C++ Design, Spring Framework和Ruby的Mixin....

阅读更多

原文出处及讨论: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<classCheckingPolicy>
classSmartPtr : public CheckingPolicy
{...};

typedefSmartPtr
<NoChecking>noCheckPtr;

上段代码,在编译期把NoChecking类传入到SmartPtr中,组合成noCheckPtr类。而实战中,还会用到"template template parameter"....

2 .Java则紧守最古老的委托模式来达成:
最终类拥有实际施行各种行为的行为类的指针。所有最终类的方法都将委托给行为类来执行。如果行为多样时,采用基于接口编程。同时利用Java的反射特质,用IOC Container根据配置实现注入的自动化。

3. Ruby则倚仗自己的动态特性,直接在语言中内建了Mixin特性。
moduleGreetable
defgreet
puts
"Yourageis,"+self.age
end
end

classPerson
includeGreetable
definitialize(name,age)
@name
=name
@age
=age
end
attr_reader:age
end

person
=Person.new("Bruce",40)
person.greet

Yourageis
40.

此段代码将Greetable类Minxin进了Person类里头,让其拥有了greet方法。
也多亏了Ruby的动态性,让Greetable可以打印一个自身毫不知情的,其实属于Person的属性age.

就因为同一样事情还有着C++模板、传统Delegate和新兴动态Minxin的选择,让我们这些工蚁,还觉得有些许的自由和左顾右盼的乐趣。
分享到:
评论

相关推荐

    mixin.js:用于 JavaScript 的简单简洁的 mixins 库

    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::information: 网站和 Mixin 网络浏览器" 这个标题提到了两个关键概念:Mixin.one 和 Mixin 网络浏览器。Mixin.one 可能是一个基于互联网的平台或者服务,而 Mixin 网络浏览器则可能是该平台的一部分,...

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

    从 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

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

    supergroup.mixin.one::spiral_shell:Mixin Super Group源代码-one source code

    supergroup.mixin.one是“ Mixin中文群”的源代码,它是基于Mixin bot的无限成员组。 注意 !!! 在升级组之前,请先签出 。 准备 将./config/config.tpl.yaml复制到./config/config.yaml 替换config.yaml配置,...

    Design Patterns in Modern C++

    作者在书中提及了一些重要的编程概念,如Curiously Recurring Template Pattern(好奇递归模板模式)、Mixin继承、以及属性(Properties)等,这些都是C++编程中的高级特性。同时,书中也讲述了设计原则,特别是...

    ruby-destroyed_at, 用于安全销毁的ActiveRecord Mixin.zip

    ruby-destroyed_at, 用于安全销毁的ActiveRecord Mixin DestroyedAt 查找帮助?如果是一个 Bug ,请在GitHub上打开一个问题。安装将 destroyed_at gem 添加到 Gemfilegem 'destroyed_at'你可以在每个模块中

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

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

    mixin-node:用于mixin.one的Node.js SDK

    用于mixin.one的Node.js SDK 按照mixin开发人员文档创建您的mixin应用。 单击按钮“单击以生成新的会话”。 现在,您将拥有机器人会话的秘密。 6位数字是您的资产PIN。UUID是新的会话ID。第三行是加密的PIN_TOKEN...

    08Ruby 模块.docx

    Mixin 是 Ruby 中的一种特殊机制,用于模拟多重继承的效果。通过将模块混入到类中,可以让类获得模块中的方法和属性。 **示例代码**: ```ruby module Movable def move(x, y) # 实现移动逻辑 end end class ...

    mixinjs:一个小型库,用于创建具有有用的基于mixins的继承的工厂。 受React的createClass方法启发

    mixin.js 一个小型库,用于使用基于mixins的有用继承来创建功能强大的工厂。 受React.js的createClass工厂方法的启发。 var MyLib . classFactory = mixin ( { getInitialState : mixin . policy . method . MERGE_...

    scss使用mixin不生效(浏览器无法编译出来)的解决方法

    以下是一些解决这个问题的方法和SCSS的`mixin`使用详解。 首先,让我们回顾一下`mixin`的基本语法。在SCSS中,你可以这样定义一个`mixin`: ```scss @mixin my-mixin($color) { color: $color; font-weight: ...

    developers.mixin.one:开发人员门户

    如何创建应用并获取Mixin Messager用户的access_token: : Mixin Network的API文档 沟通 电报组: : Mixin新闻 日志: : 阻止信息: : 推特: : 面子书: : YouTube: ...

    awesome_print, 在全彩色和适当的缩进,漂亮的打印你的ruby 对象.zip

    awesome_print, 在全彩色和适当的缩进,漂亮的打印你的ruby 对象 的出色打印 Awesome Print是一个 ruby 库,它可以在完整颜色中打印 ruby 对象,以适当的缩进显示它的内部结构。 Rails 对象和 Rails 模板中的用法...

    Scalar :标量基类不允许非标量实例化。-matlab开发

    这种约束简化了类设计并避免了多态数组(matlab.mixin.Heterogeneous)。 元胞数组或结构可用于聚合标量对象。 Scalar 类通过“(...)”索引禁用对象数组的构造, 通过串联(cat、vertcat、horzcat)或使用“空”...

    ruby.rar

    Ruby是一种强大的、面向对象的编程语言,以其简洁的语法和注重开发者生产力的设计理念而闻名。在"ruby.rar"这个压缩包中,包含了三本中文教程,可以帮助初学者和经验丰富的开发者深入理解Ruby语言的核心概念和高级...

    ruby-main.zip

    8. **模块化编程**:Ruby的模块系统支持命名空间和混合(mixin),通过`include`或`extend`关键字,模块可以被纳入类中,实现代码的复用和组织。 9. **闭包**:Ruby中的Blocks、Procs和Lambdas都具有闭包特性,能...

    Ruby 学习指南.rar

    Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而闻名。本"Ruby学习指南"旨在帮助初学者快速掌握Ruby的基础知识,同时也为有一定经验的开发者提供深入学习的资源。 1. **Ruby...

    Ruby中文文档.rar

    Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而闻名。这份"Ruby中文文档.CHM"是针对初学者的宝贵资源,它将帮助你全面了解并掌握Ruby语言的基础和高级特性。 1. **Ruby语言...

    19-Mixin混入.js

    19-Mixin混入

Global site tag (gtag.js) - Google Analytics