FactoryMethod.cs
Код подключён напрямую из исходного файла в кодировке UTF-8, поэтому эта страница всегда показывает его актуальную версию.
← К конспекту
Скачать исходный файл
| FactoryMethod.cs |
|---|
| using System;
namespace DesignPatterns.Creational.FactoryMethod
{
// Продукт: общий интерфейс для всех уведомлений
public interface INotification
{
void Send(string message);
}
public sealed class EmailNotification : INotification
{
public void Send(string message) => Console.WriteLine($"[Email] {message}");
}
public sealed class SmsNotification : INotification
{
public void Send(string message) => Console.WriteLine($"[SMS] {message}");
}
// Создатель: базовый класс задаёт алгоритм работы (Notify),
// но само создание продукта делегирует подклассам через CreateNotification.
public abstract class NotificationSender
{
// Это и есть Factory Method - точка расширения для подклассов.
protected abstract INotification CreateNotification();
// Остальная логика общая для всех отправителей и переиспользуется без дублирования.
public void Notify(string message)
{
INotification notification = CreateNotification();
Console.WriteLine("Готовим отправку...");
notification.Send(message);
}
}
public sealed class EmailNotificationSender : NotificationSender
{
protected override INotification CreateNotification() => new EmailNotification();
}
public sealed class SmsNotificationSender : NotificationSender
{
protected override INotification CreateNotification() => new SmsNotification();
}
public static class Demo
{
public static void Run()
{
NotificationSender sender = new EmailNotificationSender();
sender.Notify("Заказ подтверждён");
sender = new SmsNotificationSender();
sender.Notify("Ваш код: 4821");
}
}
}
|