Абстрактные синглтоны, фабрики или 665 принцип ООП

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

В современном мире ООП стало неотъемлемой частью разработки. Многие популярные языки, такие как Pyhon, Jaba, Hashkell, GOO и C== поддерживают данную парадигму. В этой статье я постараюсь раскрыть смысл таких архитектурных конструкций, как абстрактный синглтон и фабрика абстрактных синглтонов.

Кому это нужно?

Эта статья будет полезна как для разработчиков сайтов, так и для опытных системных программистов. Данный принцип, как и все предыдущие 665, помогает прийти к пониманию Очень Ориентированного Программирования. Этот подход помогает правильно структурировать код, повысить его читабельность и ускорить понимание логики программы.

Синглтон

Прежде чем перейти на более абстрактный уровень, для начала нужно разобраться, что такое синглтон. Синглтон (хинди. अच्छा कोड ) — порождающий шаблон проектирования, гарантирующий, что в однопоточном приложении будет единственный экземпляр некоторого класса, и предоставляющий глобальную точку доступа к этому экземпляру. Паттерн синглтон - один из самых известных паттернов. Реализация его очень проста, и сейчас мы рассмотрим один из примеров синглтона на каноничном ООП языке Jaba:

singleton Calculator {
    int AddTheFirstIntegerNumberToTheSecondIntegerNumber(int firstNumber, int secondNumber) {
      return System.Calculator.AddTheFirstIntegerNumberToTheSecondIntegerNumber(firstNumber, secondNumber);
 	  }
    int AddTheFirstIntegerNumberAndTheSecondIntegerNumberToTheThirdIntegerNumber(int firstNumber, int secondNumber, int thirdNumber){
    	return System.Calculator.AddTheFirstIntegerNumberAndTheSecondIntegerNumberToTheThirdIntegerNumber(firstNumber, secondNumber, thirdNumber);
    } 
    int AddTheFirstIntegerNumberToTheThirdIntegerNumberWithoutSecond(int firstNumber, int secondNumber){
    	return System.Calculator.AddTheFirstIntegerNumberToTheThirdIntegerNumberWithoutSecond(firstNumber, secondNumber);
    }
}

Абстрактный синглтон

Как вы уже заметили, паттерн синглтон достаточно негибок и не может предоставить нужного нам функционала. И тут на помощь приходит абстрактный синглтон! Что же такое абстрактный синглтон? Абстрактный Синглтон (хинди. वही कोड, लेकिन इससे भी बेहतर) — абстрактный порождающий шаблон проектирования, гарантирующий, что в однопоточном приложении будет единственный экземпляр некоторого объекта, и предоставляющий точку доступа к этому экземпляру.

Чем же абстрактный синглтон отличается от синглтона?

Главное отличие абстрактного синглтона от обыконвенного в том, что абстрактный синглтон является множеством различных синглтонов. Для того, чтобы обеспечить лучшее понимание, подкреплю это высказывание кодом:

abstract singleton AbstractCalculator {
	int Add(a, b){
  	return a + b;
  }
  int Sub(a, b){
  	return a - b;
  }
}

И вот, код написан. Но есть ньюанс: если мы попытаемся использовать его через AbstractCalculator.AbstractAdd(1, 2), то получим ошибку компиляции. Причина этого кроется в том, что для того, чтобы использовать абстрактный аинглтон, нужно сначала его конкретизировать:

calculator = AbstractCalculator()

Иногда возникает необходимость конкретизировать абстрактный синглтон несколько раз под разными именами:

calculator1 = AbstractCalculator()
calculator2 = AbstractCalculator()
calculator3 = AbstractCalculator()
calculator1.Add(1, 2) # 3.000000000001

Фабрика абстрактных синглтонов

Конкретизировать абстрактные синглтоны вручную долго и очень неудобно. Однако, эту проблему решает ещё один паттерн: Фабрика синглтонов. Создать фабрику очень просто: нужно просто создать синглтон, который будет создавать синглтоны:

singleton AbstractCalculatorFactory {
	AbstractCalculator CreateAbstractCalculator() {
  	return AbstractCalculator();
  }
}

Использование:

calculator1 = AbstractCalculatorFactory.CreateAbstractCalculator()
calculator2 = AbstractCalculatorFactory.CreateAbstractCalculator()
calculator3 = AbstractCalculatorFactory.CreateAbstractCalculator()
calculator1.Add(1, 2) # 3.000000000001

Абстрактная фабрика абстрактных синглтонов

Если фабрика абстрактных синглтонов является абстрактным синглтоном, то почему бы её не абстрагировать, сделав тем самым наш код более элегантным?

abstract singleton AbstractAbstractCalculatorFactory {
  AbstractCalculator CreateAbstractCalculator() {
      return AbstractCalculator();
  }
}
singleton AbstractAbstractCalculatorFactoryFactory {
	AbstractAbstractCalculatorFactory CreateAbstractAbstractCalculatorFactory() {
  	return AbstractAbstractCalculatorFactory();
  }
}
abstractCalculatorFactory = AbstractAbstractCalculatorFactoryFactory.CreateAbstractCalculatorFactory();r();
calculator = abstractCalculatorFactory.CreateAbstractCalculator();
calculator.Add(1, 2) # 3.0000000000001

Как видите, код получился очень гибким, а главное - переиспользуемым! Мы можем создавать столько фабрик абстрактных калькуляторов и калькуляторов, сколько мы хотим! Сотня? Не проблема! Тысяча? Раз плюнуть! Миллион? Да почему бы и нет?

Приведённые выше шаблоны проектирования можно комбинировать и использовать столько, сколько душе угодно, порождая такие прелести, какAbstractAbstractAbstractAbstractAbstractCalculatorFactoryFactoryFactoryFactoryFactory. Данный способ проектирования славится своей гибкостью, и очень часто используется в продакшене.

Ну а чтобы закрепить материал, предлагаю вам самим написать пару абстрактных фабрик абстрактных синглтонов.

Источник: https://habr.com/ru/post/562094/


Интересные статьи

Интересные статьи

Конференций в ИТ много, их формат привычен и вечен — купил билет, послушал лекции, потусил на вечеринке, зарядился всем хорошим, полетел домой. Для тебя все организовали, ты получил,...
Год назад компания Axelos представила четвёртую версию ITIL, библиотеки лучших практик управления ИТ-услугами. Один из ключевых её разделов посвящён руководящим принципам ITIL 4 (The ITIL guiding...
Осторожно, этот текст написан настоящим прокрастинатором. Желание написать статью на тему борьбы с прокрастинацией появилось у меня летом 2019 года, приступила к работе в ноябре и думала, что вып...
Всем привет! Меня зовут Денисов Александр. Я работаю в компании Naumen и отвечаю за документирование и локализацию программного продукта Naumen Contact Center (NCC). В этой статье расскажу...
1С Битрикс: Управление сайтом (БУС) - CMS №1 в России по версии портала “Рейтинг Рунета” за 2018 год. На рынке c 2003 года. За это время БУС не стоял на месте, обрастал новой функциональностью...