Шаблоны программирования на Swift: Template Method

example-template-method_proSwift_ru

В этой статье мы рассмотрим шаблон программирования Шаблон (Template Method) на Swift в среде разработки XCode

Template Method

Вы заметили как много в нашей жизни шаблонов? Ну к примеру – наше поведение когда мы приходим в незнакомый дом:

  1. Зайти
  2. Поздороваться с ясхозяевами
  3. Раздеться, молясь о том что у нас носки не дырявые
  4. Пройти, и охать удивляясь какая большая/уютная/забавная квартира

Или же когда мы приходим в квартиру, где происходит ремонт:

  1. Зайти
  2. Поздороваться с хозяевами
  3. Не раззуваться, потому как грязно!
  4. Поохать когда хозяин квартиры поведает нам смелость его архитектурной мысли!

В целом, все происходит практически одинаково, но с изюминкой в каждом различно случае:) Наверное потому то, это и называется шаблоном поведения. Шаблонный метод задает алгоритму пошаговоую инструкцию. Элементы алгоритма же, определяются в наследующих классах.

Сам паттерн ну очень интуитивный, и я уверен что многие давно уже использовали его. Потому давайте попробуем сделать пример. Вернемся к старой практике, писать примеры по созданию телефонов!

Итак, напишем наш шаблонный класс, при помощи которого будем создавать телефон:

//
// proSwift.ru
//

class AnyPhoneTemplate {

    func takeBox() {
        print("Берем коробку")
    }
    
    func takeCamera() {
        print("Берем камеру")
    }

    func takeMicrophone() {
        print("Берем микрофон")
    }

    
    func assemble() {
        print("Собираем все вместе")
    }
    
    func makePhone() {
        takeBox()
        takeCamera()
        takeMicrophone()
        assemble()
    }
}

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

//
// proSwift.ru
//

class iPhoneMaker: AnyPhoneTemplate {
    
    func design() {
        print("Клеим яблоко, и пишем Разработано в Калифорнии")
    }
    override func takeBox() {
        design()
        super.takeBox()
    }
}

У сборщика яблочных телефонов есть один дополнительный метод – design, а также перегруженный метод takeBox в котором дополнительно вызывается метод design и после этого вызывается родительский метод takeBox.

На очереди сборка Android:

//
// proSwift.ru
//

class AndroidMaker: AnyPhoneTemplate {
    
    func addRam() {
        print("Суем внутрь еще 6 процессоров")
    }
    
    func addCPU() {
        print("Добавляем вечно нехватающей оперативки")
    }
    
    override func assemble() {
        addCPU()
        addRam()
        super.assemble()
    }
}

У сборщика андроида аж целых два дополнительных метода, и перегружен метод assemble.

Тест здесь конечно же – элементарный

//
// proSwift.ru
//

let android = AndroidMaker()
let iPhone = iPhoneMaker()

android.makePhone()
print("- - - - - - ")
iPhone.makePhone()

И традиционный лог в консоль

Берем коробку
Берем камеру
Берем микрофон
Добавляем вечно нехватающей оперативки
Суем внутрь еще 6 процессоров
Собираем все вместе
- - - - - - 
Клеим яблоко, и пишем Разработано в Калифорнии
Берем коробку
Берем камеру
Берем микрофон
Собираем все вместе


Метки:
Один комментарий на “Шаблоны программирования на Swift: Template Method
  1. YB:

    Один мааленький нюанс: для AndroidMaker код в методах addRam и addCPU перепутан код.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.