Шаблоны проектирования — это многократно используемые решения, которые, как было доказано, решают определенные проблемы разработки программного обеспечения. Существует три основных категории шаблонов проектирования: творческие, структурные и поведенческие. В этом посте мы сосредоточимся на творческих шаблонах проектирования и на том, как их можно реализовать на 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 и найдите прекрасную работу