Let’s back to article of ISP and take this implementation:
PeopleTransporting {
transport (Point A, Point B, int peopleCount)
}
SmallPackagesTransporting {
transport (Point A, Point B, List<SmallPackage> smallPackages)
}
Car implements PeopleTransporting {
transport (Point A, Point B, int peopleCount) {...}
}
Parcelobus implements SmallPackagesTransporting {
transport (Point A, Point B, List<SmallPackage> packages) {...}
}
The usage is clear:
List<PeopleTransporting> peopleTransporters;
peopleTransporters.stream().forEach(pt -> pt.transport (pointA, pointB, peoples.size())
OK, so let’s check how this design is resilient to new requirements.
We need to transport BigPackages
BigPackagesTransporting {
transport (Point A, Point B, List<BigPackage> packages)
}
Parcelobus implements SmallPackagesTransporting, BigPackagesTransporting{
transport (Point A, Point B, List<SmallPackage> packages) {...}
transport (Point A, Point B, List<BigPackage> packages) {...}
}
Truck implements BigPackagesTransporting {
transport (Point A, Point B, List<BigPackage> packages) {...}
}