Загрузка данных


using System;

// 1. Базовый абстрактный класс Transport
public abstract class Transport
{
    public abstract void Move();
}

// 2. Конкретные классы-наследники транспорта
public class Car : Transport
{
    public override void Move()
    {
        Console.WriteLine("Еду по дороге");
    }
}

public class Bicycle : Transport
{
    public override void Move()
    {
        Console.WriteLine("Катаюсь по велодорожке");
    }
}

public class Boat : Transport
{
    public override void Move()
    {
        Console.WriteLine("Плыву по воде");
    }
}

// 3. Абстрактный класс фабрики TransportFactory
public abstract class TransportFactory
{
    public abstract Transport CreateTransport();
}

// 4. Конкретные фабрики для каждого транспорта
public class CarFactory : TransportFactory
{
    public override Transport CreateTransport()
    {
        return new Car();
    }
}

public class BicycleFactory : TransportFactory
{
    public override Transport CreateTransport()
    {
        return new Bicycle();
    }
}

public class BoatFactory : TransportFactory
{
    public override Transport CreateTransport()
    {
        return new Boat();
    }
}

// 5. Клиентский код (Точка входа)
public class Program
{
    public static void Main(string[] args)
    {
        Console.WriteLine("--- Демонстрация работы Фабричного метода ---\n");

        // Использование фабрики машин
        TransportFactory carFactory = new CarFactory();
        Transport myCar = carFactory.CreateTransport();
        myCar.Move(); // Выведет: Еду по дороге

        // Использование фабрики велосипедов
        TransportFactory bicycleFactory = new BicycleFactory();
        Transport myBicycle = bicycleFactory.CreateTransport();
        myBicycle.Move(); // Выведет: Катаюсь по велодорожке

        // Использование фабрики лодок
        TransportFactory boatFactory = new BoatFactory();
        Transport myBoat = boatFactory.CreateTransport();
        myBoat.Move(); // Выведет: Плыву по воде
    }
}