| « Клонирование объектов утилитой ObjectUtil.copy | Публичные переменные в классе flash.geom.Point » |
Решение проблемы наследования от Point.
Проблема:
Допустим, сделал я интерфейс IVector:
- interface IVector{
- function get x () : Number;
- …
- }
Есть у меня класс утилита, который работает с этим интерфейсом:
- class VectorMath{
- public function calc(v:IVector):IVector
- {
- …
- }
- …
- }
Кульминация - нужно сделать реализацию IVector:
- class Vector implements IVector
- {
- private var _x : Number;
- public function get x () : Number
- {
- return _x;
- }
- …
- }
Если присмотреться к классу Vector, становиться понятно, что он очень похож на Point.
Что же делать, ведь в данной реализации наследовать Vector от Point нельзя. Включать Point в Vector тоже нехорошо, потому как мы потеряем поведение Point. И для всех системных утилит принимающих Point, придется делать преобразование.
Решение:
Перепишем интерфейс IVector:
- interface IVector
- {
- function get i () : Number;
- }
И реализация IVector будет иметь следующий вид:
- class Vector extends Point implements IVector
- {
- public function get i () : Number
- {
- //это не опечатка :)
- return super.x;
- }
- …
- }
Вот такая радость
. Сегодня придумал. Если вы увидели недостатки данного решения, очень прошу поделиться.
5 комментариев
Не понятно для чего i? Почему i? Как применять это решение?
Просто я пишу книгу и решил опубликовать отрывок...
А что за книга будет?