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


using System;

namespace FactoryMethodTransport
{
    // ==========================================
    // 1. Базовый интерфейс транспорта
    // ==========================================
    public interface ITransport
    {
        void Move();
    }

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

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

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

    // ==========================================
    // 3. Абстрактный класс фабрики
    // ==========================================
    public abstract class TransportFactory
    {
        // Фабричный метод
        public abstract ITransport CreateTransport();
    }

    // ==========================================
    // 4. Конкретные фабрики
    // ==========================================
    public class CarFactory : TransportFactory
    {
        public override ITransport CreateTransport()
        {
            return new Car();
        }
    }

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

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

    // ==========================================
    // 5. Клиентский код
    // ==========================================
    class Program
    {
        static void Main(string[] args)
        {
            // Настройка кодировки консоли для корректного вывода кириллицы
            Console.OutputEncoding = System.Text.Encoding.UTF8;

            Console.WriteLine("--- Демонстрация работы фабричного метода ---\n");

            // Использование фабрики для создания машины
            TransportFactory carFactory = new CarFactory();
            ITransport car = carFactory.CreateTransport();
            Console.Write("CarFactory создал объект: ");
            car.Move();

            // Использование фабрики для создания велосипеда
            TransportFactory bicycleFactory = new BicycleFactory();
            ITransport bicycle = bicycleFactory.CreateTransport();
            Console.Write("BicycleFactory создал объект: ");
            bicycle.Move();

            // Использование фабрики для создания лодки
            TransportFactory boatFactory = new BoatFactory();
            ITransport boat = boatFactory.CreateTransport();
            Console.Write("BoatFactory создал объект: ");
            boat.Move();

            Console.ReadLine();
        }
    }
}