Как использовать принцип полиморфизма?

Есть клас и сервис:

interface Search {
    search(): Observable<any>;
}

class CloudService implements Search {
    search(): Observable<any> {
        return of([1,2,3]).pipe(delay(3000));
    }
}

class SearchByAddressParcel implements Search {
    constructor(private CloudService: CloudService) {}

    search() {
        this.CloudService.search().subscribe((response) => {
          console.log(response);
        });
    }
}


Оба реализуют интерфейс interface Search {}

Проблема в том, что класса SearchByAddressParcel метод search должен возвращать void, потому как подписка происходит внутри метода.

Завтра я хочу новую реазилацию: class SearchByAddressNew {} который тоже должени иметь метод search и обращаться внутри к сервису.

Потом делать подмену: new SearchByAddressParcel().search()на new SearchByAddressNew().search();
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ответы на вопрос 1
E1ON
@E1ON
web, gamedev, anime, science
Можно женериком реализовать :thinking
Либо
search(): Observable<any> | void

interface Search<T> {
    search(): T
}

class CloudService implements Search<Observable<any>> {
    search() {
        return of([1,2,3]).pipe(delay(3000));
    }
}

class SearchByAddressParcel implements Search<void> {
    constructor(private CloudService: CloudService) {}

    search() {
        this.CloudService.search().subscribe((response) => {
          console.log(response);
        });
    }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы