1 Введение в шаблоны проектирования и Singleton Pattern

Шаблоны обеспечивают решение commonly occurring problems в разработке программного обеспечения. Образцы дизайна впервые были введены GoF(Gang of Four) , где они описаны общие закономерности как проблемы , которые возникают снова и снова , и решение этих проблем.

Шаблоны проектирования имеют четыре основных элемента:

  1. The pattern name является дескриптором мы можем использовать , чтобы описать проблему проектирования, ее решения, а также последствия в два слова.
  2. The problem описывает , когда применить шаблон.
  3. The solution описывает элементы, составляющие конструкцию, их отношения, обязанности и сотрудничество.
  4. The consequences результаты и компромиссы применения шаблона.

Преимущества дизайна выкройки:

  1. Они могут быть использованы в нескольких проектах.
  2. Архитектурный уровень проблем может быть решен
  3. Они проверены временем и хорошо себя зарекомендовали, что является опытом разработчиков и архитекторов.
  4. У них есть надежность и зависимость

Шаблоны проектирования можно разделить на три категории:

  1. Творческий Образец
  2. Структурная картина
  3. Поведенческая картина

Creational Pattern - Они обеспокоены тем , как объект может быть создан и они изолируют детали создания объекта.

Structural Pattern - Они разрабатывают структуру классов и объектов таким образом, чтобы они могли составить для достижения больших результатов.

Behavioral Pattern - Они связаны с взаимодействием между объектами и ответственности объектов.

Singleton Pattern:

Это тип creational pattern , который обеспечивает механизм , чтобы иметь только один и один объект данного типа и обеспечивает глобальную точку доступа.

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

Реализация

Мы можем реализовать шаблон Singleton в Python, создав только один экземпляр класса Singleton и снова предоставив тот же объект.

 class Singleton(object):
    def __new__(cls):
        # hasattr method checks if the class object an instance property or not.
        if not hasattr(cls, 'instance'):
            cls.instance = super(Singleton, cls).__new__(cls)
        return cls.instance

s = Singleton()
print ("Object created", s)

s1 = Singleton()
print ("Object2 created", s1)

 

Выход:

 ('Object created', <__main__.Singleton object at 0x10a7cc310>)
('Object2 created', <__main__.Singleton object at 0x10a7cc310>)

 

Обратите внимание, что в таких языках, как C ++ или Java, этот шаблон реализуется путем обеспечения приватности конструктора и создания статического метода, выполняющего инициализацию объекта. Таким образом, один объект создается при первом вызове, а класс возвращает тот же объект после этого. Но в Python у нас нет никакого способа создавать частные конструкторы.

Фабричный образец

Завод шаблон также Creational pattern . Термин factory означает , что класс отвечает за создание объектов других типов. Существует класс, который действует как фабрика, с которой связаны объекты и методы. Клиент создает объект, вызывая методы с определенными параметрами, а фабрика создает объект нужного типа и возвращает его клиенту.

 from abc import ABCMeta, abstractmethod

class Music():
    __metaclass__ = ABCMeta
    @abstractmethod
    def do_play(self):
        pass

class Mp3(Music):
    def do_play(self):
        print ("Playing .mp3 music!")

class Ogg(Music):
    def do_play(self):
        print ("Playing .ogg music!")

class MusicFactory(object):
    def play_sound(self, object_type):
        return eval(object_type)().do_play()

if __name__ == "__main__":
    mf = MusicFactory()
    music = input("Which music you want to play Mp3 or Ogg")
    mf.play_sound(music)

 

Выход:

 Which music you want to play Mp3 or Ogg"Ogg"
Playing .ogg music!

 

MusicFactory класс завода здесь создает либо объект типа Mp3 или Ogg в зависимости от выбора пользователя обеспечивает.