当前位置:  开发笔记 > 后端 > 正文

Mixins和/ Traits的一些好例子是什么?

如何解决《Mixins和/Traits的一些好例子是什么?》经验,为你挑选了2个好方法。

我正在阅读Ruby,并了解了它的mixins模式,但是没想到很多有用的mixin功能(因为我不习惯这么想的方式).所以我想知道什么是有用的Mixin功能的好例子?

谢谢

编辑:有点背景.我来自C++和其他对象语言,但我怀疑的是Ruby说它不是继承mixins,但我一直认为mixins是多重继承,所以我担心我想把它们分类太快进入我的舒适区,并没有真正了解mixin是什么.



1> Jon Wood..:

它们通常用于向类添加某种形式的标准功能,而无需重新定义它们.您可能认为它们有点像Java中的接口,但不仅仅是定义需要实现的方法列表,其中许多实际上都是通过包含模块实现的.

标准库中有一些示例:

单例 - 可以混合到任何类中以使其成为单例的模块.initialize方法是私有的,并添加了一个实例方法,它确保应用程序中只有该类的一个实例.

可比较 - 如果将此模块包含在类中,则定义<=>方法(将当前实例与另一个对象进行比较,并说明哪个更大)足以提供<,<=,==,> =,>和之间?方法.

可枚举 - 通过混合此模块并定义每个方法,您可以获得所有其他相关方法的支持,例如collect,inject,select和reject.如果它也有<=>方法,那么它也将支持sort,min和max.

DataMapper也是一个有趣的例子,可以使用简单的include语句,采用标准类,并添加将其持久保存到数据存储的功能.



2> Gishu..:

我认为通常的例子是持久性

module Persistence
    def load sFileName
            puts "load code to read #{sFileName} contents into my_data"
    end
        def save sFileName
        puts "Uber code to persist #{@my_data} to #{sFileName}"
    end

end

class BrandNewClass
    include Persistence
    attr :my_data

        def data=(someData)
        @my_data = someData
    end
end

b = BrandNewClass.new
b.data = "My pwd"
b.save "MyFile.secret"
b.load "MyFile.secret"

想象一下,该模块是由Ruby忍者编写的,它将您的类的状态保存到文件中.
现在假设我写了一个全新的类,我可以通过混合来重用持久性的功能include ModuleILike.您甚至可以在运行时包含模块.我只需将其混合即可免费加载并保存方法.这些方法就像您为自己的课程编写的方法一样.代码/行为/功能 - 没有继承的重用!

所以你正在做的是为你的类包含方法表的方法(不是字面上正确但接近).

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有