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(); // Выведет: Плыву по воде
}
}