我应该使用什么模式来创建作为其他对象功能的对象?

时间:2015-03-07 19:03:20

标签: ruby design-patterns

我有一个名为LogicSignal

的类的实例集合

我有一套方法和"运算符"我可以调用这些实例的方法,例如

anded = signal_a & signal_b.value_at_cycle_n_minus(2)  

将在当前时间给出signal_a的按位和值以及当前周期的signal_b的值 - 2.

信号随时间变化,所以当我运行时

puts signal_a & signal_b  
advance_time
puts signal_a & signal_b

我会在不同的时间获得价值

但如果我跑这个

anded = signal_a & signal_b
puts added
advance_time
puts anded

我会打印相同的值。

问题是我需要将信号的任意函数传递给其他对象,并且他们需要能够在任意时间获得这些函数的结果。

我知道如果运行这个

anded = lambda { signal_a & signal_b }
puts anded.call
advance_time
puts anded.call

我会在不同时间得到值,但anded不是信号,所以我不能用它来代替信号。 因此,例如,如果某个对象需要能够在某个任意时间点获取anded值,则无法调用anded.value_at_cycle_n_minus(),因为anded是一个proc而不是一个信号< / p>

我的第一个想法是使用类似复合模式的东西,并创建一个CompositeLogicSignal类,它实现LogicSignal类的所有方法,但是通过调用带有子信号的proc来实现。

所以我会有类似的东西

anded = CompositeLogicSignal.new [signal_a, signal_b] , lambda { |a,b| a & b }

是否有更简单的方法,还是有其他一些模式可以解决这个问题?

0 个答案:

没有答案