Delegation is a design pattern that combines object composition and inheritance. Basically, it is a mechanism where one object delegates actions to another. To see it in action, let's take a look how we would achieve delegation in Java:
public interface Drivable { void drive(); } public class Car implements Drivable { @Override public void drive() { System.out.println("Driving a car"); } } public class Vehicle implements Drivable { private Car car; public Vehicle(Car car) { this.car = car; } @Override public void drive() { car.drive(); } } public void driveVehicle() { Car car = new Car(); Vehicle vehicle = new Vehicle(car); vehicle.drive(); // with delegation, car.drive() get's called }
In this example, we have the Drivable
interface and two classes that implement it. The Vehicle
class doesn't have its own drive functionality; rather, it delegates the drive function to the Car
object.
If we were to write the same example in Kotlin, it would look like this:
interface Drivable...