powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Фиктивный предок
8 сообщений из 8, страница 1 из 1
Фиктивный предок
    #35148047
connt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть класс Контракт на поставку услуг, он обладает полем заказчик. Заказчик может быть как физическим, так и юридическим лицом. Но эти лица не обладают ни одним общим параметром, физическое лицо - ФИО, паспорт итп, юридическое - банк, ИНН, КПП итп. - все разные. Но не награждать-же контракт двумя полями заказчика, одно из которых будет null.
Т.е. вроде как нужен фиктивный предок для них обоих, полностью пустой, насколько нормально так делать ?
...
Рейтинг: 0 / 0
Фиктивный предок
    #35148065
zloy den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создается абстрактный класс, от которого наследуются оба. либо через интерфейс
...
Рейтинг: 0 / 0
Фиктивный предок
    #35148073
zloy denСоздается абстрактный класс, от которого наследуются оба. либо через интерфейс

А если подумать?
...
Рейтинг: 0 / 0
Фиктивный предок
    #35148116
zloy den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сегодня с подумать тяжело, но инерфейсы тут нафиг не нужны конечно
...
Рейтинг: 0 / 0
Фиктивный предок
    #35148135
connt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
т.е. все-таки пустой фиктивный предок, спасибо
...
Рейтинг: 0 / 0
Фиктивный предок
    #35148427
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
conntт.е. все-таки пустой фиктивный предок, спасибо

И чего ты этим добъёшься? Фиктивный предок и так уже есть. Называется Object :)
Предок не должен быть фиктивным иначе потекут по коду instanceOf customer.

Как вариант:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
//такое подходит только для простой логики - параллельные иерархии зло :)

 interface  IContract {
    //тут общие методы для работы с контрактом (независимые от типа заказчика)
}

 class  NaturalPersonContract  implements  IContract {
    //реализация логики для физических лиц
     private  NaturalPerson customer;
}
 class  LegalPersonContract  implements  IContract {
    //реализация логики для юридических лиц
     private  LegalPerson customer;
}

или

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
//почти мультиметод... Даёшь двойную диспетчеризацию в массы!

 abstract   class  Customer {
     //тут общие методы для всех заказчиков

      abstract   protected   void  apply(Customer.Visitor visitor);

     //каждый визитор это метод в классе Customer, требующий специфических параметров
      public   interface  Visitor {
             void  visit(Customer.Natural customer);
             void  visit(Customer.Legal customer);
     }
  
      class  Natural  implements  Customer {
             public   void  apply(Customer.Visitor visitor) { visitor.visit( this ); };
            //реализация общих методов
     }

      class  Legal  implements  Customer {
             public   void  apply(Customer.Visitor visitor) { visitor.visit( this ); };
            //реализация общих методов
     }

}

 class  Contract {
      private  Customer customer;
}

Надо ли всё это городить ради того, чтобы убрать class cast'ы из кода - вопрос философский :)
...
Рейтинг: 0 / 0
Фиктивный предок
    #35148829
connt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
что-то я все-таки не уверен, что этот паттерн стоит здесь применять :)
Да и разница между моим фиктивным предком и Object все-таки есть - какой-нибудь comboBox не сможет подписать контракт :)
...
Рейтинг: 0 / 0
Фиктивный предок
    #35149139
Dmitriy55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
conntЕсть класс Контракт на поставку услуг, он обладает полем заказчик. Заказчик может быть как физическим, так и юридическим лицом. Но эти лица не обладают ни одним общим параметром, физическое лицо - ФИО, паспорт итп, юридическое - банк, ИНН, КПП итп. - все разные. Но не награждать-же контракт двумя полями заказчика, одно из которых будет null.
Т.е. вроде как нужен фиктивный предок для них обоих, полностью пустой, насколько нормально так делать ?
Например так:
Zakazchik пустой интерфейс
Ur_person implements Zakazchk
Phis_person impements Zakazchik
Класс контракт имеет поле Zakazchik z; и поле boolean zType;
устанавливаешь zType в false , когда z кладешь экземпляр Ur_person и в true , когда - Phis_person .
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Фиктивный предок
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]