Это интересный вопрос, так как @ user2490003 сказал, что нет записи / неправильного способа сделать это.
Ваш подход будет меняться в зависимости от того, как реализуются ваши классы A, B и C и их представление, а также от того, что ваш метод делает в каждом классе.
Давайте рассмотрим пример, метод с именем talk
и два класса Man
, Women
.
Итак, вы можете реализовать это как
Отдельные методы класса
class Man
def talk
# talk like an adult
end
end
class Women
def talk
# talk like an adult
end
end
Однако, как вы можете видеть, этот метод talk
одинаков как для Man
, так и для *Women
и вы также можете видеть, что они обычно имеют одинаковые функции и атрибуты.Итак, создайте базовый класс с именем Human
и переместите туда метод talk
Как метод базового класса
class Human
def talk
# talk like an adult
end
end
class Man < Human
end
class Woman < Human
end
Теперь давайте возьмем пример ребенка и скажем ребенок talk
отличается от мужчины и женщины, хотя ребенок все еще наследует от Human
.В таких случаях вы можете сделать
class Baby < Human
def talk
# baby talk
end
end
. То, что здесь происходит, Ребенок наследует от Человека, но когда вы звоните
Baby.new.talk # => baby talk
, он выполняет talk
метод в классе Baby (не в классе Human)
Извлечение метода в модуль
Давайте возьмем класс Parrot
и предположим, что он также имеет метод talk
,а также он такой же как Human talk
.
Теперь проблема в том, что мы не можем унаследовать Parrot
класс от Human
, но мы все еще хотим иметь код в методе talk
.В таком случае вы можете использовать модуль, то есть вы можете сделать
module Talkable
def talk
# talk like an adult
end
end
class Human
include Talkable
end
class Parrot
include Talkable
end
. Как, как я объяснил (или хотя бы попытался), ваша реализация будет зависеть от того, как ваш класс A,Классы B, C и Message связаны между собой.
Что я лично делаю в таких ситуациях, так это достаю ручку и бумагу и пытаюсь нанести на карту эти объекты, не задумываясь о том, как их реализовать на рубине или любом другом языке.Как только вы поймете, как все они держатся вместе, легко найти синтаксис для его реализации