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();
}
}
}