Шаблон адаптера против замены Лискова

Шаблон проектирования адаптера используется для преобразования интерфейса класса (Target) в другой интерфейс (Adaptee), ожидаемый клиентами. Адаптер позволяет несовместимым классам работать вместе, что не могло бы быть иначе из-за их несовместимых интерфейсов.

Шаблон адаптера может быть реализован двумя способами: по Наследование (версия класса шаблона адаптера) и по композиции (версия объекта шаблона адаптера).

Мой вопрос касается версии класса шаблона адаптера, который реализован с использованием наследования.

Вот пример редактора чертежей:

Figure 1:

interface Shape   
{   
        Rectangle BoundingBox();   

        Manipulator CreateManipulator();   
}   

class TextView   
{   
        public TextView() { }   

        public Point GetOrigin() { }   

        public int GetWidth() { }   

        public int GetHeight() { }   
}  
interface Shape
{
        Rectangle BoundingBox();

        Manipulator CreateManipulator();
}

class TextView
{
        public TextView() { }

        public Point GetOrigin() { }

        public int GetWidth() { }

        public int GetHeight() { }
}

Мы хотели бы повторно использовать класс TextView для реализации TextShape, но интерфейсы разные, и поэтому объекты TextView и Shape не могут использоваться взаимозаменяемо.

Если нужно изменить Класс TextView для соответствия интерфейсу формы? Возможно, нет.

TextShape может адаптировать интерфейс TextView к интерфейсу фигуры одним из двух способов:

  1. Путем наследования интерфейса Shape и реализации TextView (версия класса адаптера)
  2. Путем компоновки экземпляра TextView внутри объект TextShape и реализация TextShape ' Является ли TextShape наследником от Shape и, в частности, от TextView, допустимое отношение "является"? А если нет, то не нарушает ли это принцип замещения Лискова ?

9
задан jaco0646 2 November 2018 в 08:37
поделиться