Шаблоны проектирования — это многократно используемые решения, которые, как было доказано, решают определенные проблемы разработки программного обеспечения. Существует три основных категории шаблонов проектирования: творческие, структурные и поведенческие. В этом посте мы сосредоточимся на творческих шаблонах проектирования и на том, как их можно реализовать на C#.

Порождающие шаблоны проектирования имеют дело с механизмами создания объектов. Они предоставляют способы создания объектов, скрывая логику создания, а не создавая экземпляры объектов напрямую с помощью оператора new. Это снижает сложность кода и улучшает его ремонтопригодность.

Давайте углубимся в пять типов творческих шаблонов проектирования и в то, как их можно реализовать на C#.

1. Одноэлементный шаблон

Шаблон Singleton гарантирует, что класс имеет только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру. Это может быть полезно в ситуациях, когда во всем приложении требуется только один объект.

public sealed class Singleton
{
    private static readonly Singleton instance = new Singleton();
    private Singleton() { }
    public static Singleton Instance
    {
        get { return instance; }
    }
}

2. Шаблон фабричного метода

Шаблон Factory Method предоставляет интерфейс для создания объектов, но позволяет подклассам изменять тип создаваемых объектов. Этот шаблон полезен в ситуациях, когда вы хотите отделить создание объекта от использования объекта.

public interface IFactory
{
    Product CreateProduct();
}

public class ConcreteFactory : IFactory
{
    public Product CreateProduct()
    {
        return new ConcreteProduct();
    }
}

public abstract class Product
{
    public abstract void DoSomething();
}

public class ConcreteProduct : Product
{
    public override void DoSomething()
    {
        Console.WriteLine("Concrete product does something");
    }
}

3. Абстрактная фабрика

Шаблон Abstract Factory предоставляет интерфейс для создания семейств связанных объектов без указания их конкретных классов. Этот шаблон полезен в ситуациях, когда вам нужно создать группу связанных объектов, которые работают вместе.

public interface IAbstractFactory
{
    IProductA CreateProductA();
    IProductB CreateProductB();
}

public interface IProductA
{
    void DoSomething();
}

public interface IProductB
{
    void DoSomething();
}

public class ConcreteFactory : IAbstractFactory
{
    public IProductA CreateProductA()
    {
        return new ConcreteProductA();
    }

    public IProductB CreateProductB()
    {
        return new ConcreteProductB();
    }
}

public class ConcreteProductA : IProductA
{
    public void DoSomething()
    {
        Console.WriteLine("Concrete product A does something");
    }
}

public class ConcreteProductB : IProductB
{
    public void DoSomething()
    {
        Console.WriteLine("Concrete product B does something");
    }
}

4. Шаблон построителя

Шаблон Builder отделяет построение сложного объекта от его представления, позволяя одному и тому же процессу построения создавать разные представления. Этот шаблон удобен при создании сложных объектов, требующих множества различных шагов.

public class ProductBuilder
{
    private Product product = new Product();

    public void BuildPartA()
    {
        product.PartA = "Part A";
    }

    public void BuildPartB()
    {
        product.PartB = "Part B";
    }

    public Product GetProduct()
    {
        return product;
    }
}

public class Product
{
    public string PartA { get; set; }
    public string PartB { get; set; }
}

5. Образец прототипа

Шаблон прототипа создает новые объекты путем клонирования существующих объектов, а не создает новые объекты с нуля. Этот шаблон полезен в ситуациях, когда создание нового объекта дорого или требует много времени.

public abstract class Prototype
{
    public abstract Prototype Clone();
}

public class ConcretePrototype : Prototype
{
    private string property;
    public ConcretePrototype(string property)
    {
        this.property = property;
    }

    public override Prototype Clone()
    {
        return (Prototype)this.MemberwiseClone();
    }
}

Заключение

В заключение, порождающие шаблоны проектирования предоставляют способы создания объектов, скрывая логику создания. Их можно использовать для упрощения кода и улучшения его ремонтопригодности. В этом посте мы обсудили пять типов творческих шаблонов проектирования и предоставили примеры того, как их можно реализовать на C#. Используя эти шаблоны в своих проектах разработки программного обеспечения, вы можете писать более эффективный и удобный для сопровождения код.

Повышение уровня кодирования

Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь:

  • 👏 Хлопайте за историю и подписывайтесь на автора 👉
  • 📰 Смотрите больше контента в публикации Level Up Coding
  • 💰 Бесплатный курс собеседования по программированию ⇒ Просмотреть курс
  • 🔔 Подписывайтесь на нас: Twitter | ЛинкедИн | "Новостная рассылка"

🚀👉 Присоединяйтесь к коллективу талантов Level Up и найдите прекрасную работу