Ниже приведен пример кода (полиморфный), взятый из angular framework с использованием синтаксиса TypeScript,
export abstract class AbstractControlDirective {
...
}
AbstractControlDirective
подтипы
export abstract class NgControl extends AbstractControlDirective {
...
}
export abstract class ControlContainer extends AbstractControlDirective {
...
}
export declare abstract class ControlContainer extends AbstractControlDirective {
...
}
export declare abstract class NgControl extends AbstractControlDirective {
...
}
NgControl
подтипы
export class NgModel extends NgControl implements OnChanges, OnDestroy {
...
}
export class FormControlDirective extends NgControl implements OnChanges {
....
}
export class FormControlName extends NgControl implements OnChanges, OnDestroy {
...
}
export declare class FormControlDirective extends NgControl implements OnChanges {
...
}
export declare class FormControlName extends NgControl implements OnChanges, OnDestroy {
...
}
export declare class NgModel extends NgControl implements OnChanges, OnDestroy {
...
}
В общем, есть много ситуаций, в которых встречаются новые требования, чтобы добавить очевидный супертип на промежуточных уровнях иерархии классов, который вводит поломку в подтипы, если не используется какой-либо шаблон проектирования. Использование шаблона проектирования может сделать иерархию классов менее подверженной ошибкам, но нарушает структуру иерархии.
Чтобы избежать этой проблемы, можем ли мы поддерживать эту иерархию без использования ключевого слова extends
? TypeScript структурно типизирован ...
implementing
вместо расширения абстрактных классов. Какие шаблоны проектирования, по вашему мнению, могут предотвратить это? Мне было бы интересно увидеть их - person Drenai   schedule 29.04.2018