@Илиян
Проблема ми е че след като Canvas#render_as(renderer)
, получи аргумент, ще трябва да знае за неговите методи.
Не е нужно да знае особено много, както се вижда от моето решение на този проблем.
Вместо Canvas#render_as
, които да приема като аргумет обект от тип Renderers
, мисля че е по-добре в Renderers
да има метод, който да взима като аргумент обект от тип Canvas
, за да го рендерира. Така Renderers
и ще е плъгин, защото Canvas
няма да знае за него.
Принципно, тази идея не е лоша. Въпросът е, че в момента интерфейсът (и условието) на трета задача са фиксирани и са това, което са. Трябва да направим най-доброто решение, на което сме способни, при така дадените ограничения. Нямаме право да променяме интерфейсните спецификации.
Предполагам, че ако се подава обект от Canvas
ще е нужно предварително да се фиксира вътрешната структура на представяне.
С това не съм съгласен. Рендерерите биха могли да използват спокойно вече дефинирания публичен интерфейс на Canvas
, както аз го правя в моето решение. Както се вижда, Ако го нямаше методът Canvas#render_as
, моето решение е почти същото като това, което ти си представяш – паното знае много малко, даже почти нищо за рендерерите. Самите рендерери могат да се приемат и като "плъгини", както ти ги наричаш.