fabrika

Это старая версия документа!


Порождающие паттерны - это паттерны, которые упрощают и абстрагируют создание информационных объектов. На которых базируется все ООП.

Фабричный метод (англ. Factory Method), или виртуальный конструктор (англ. Virtual Constructor) — порождающий шаблон проектирования, предоставляющий подклассам (дочерним классам, субклассам) интерфейс для создания экземпляров некоторого класса. В момент создания наследники могут определить, какой класс создавать. Иными словами, данный шаблон делегирует создание объектов наследникам родительского класса. Это позволяет использовать в коде программы не конкретные классы, а манипулировать абстрактными объектами на более высоком уровне.

import Foundation
//Factoty
enum ClothesType {
    case head
    case shoes 
}

protocol Clothes {

  var title: String { get }
  var type: ClothesType { get }
  var color: String { get } 
  func putOn()

}

class Hat: Clothes {

  var title: String = "Шляпа"
  var type: ClothesType = .head
  var color: String = "черная"
  func putOn() {
      print("Одета \(color) \(title)")
  }

}

class Shoes:Clothes {

  var title: String = "Ботинки"
  var type: ClothesType = .shoes
  var color: String = "белые"
  func putOn() {
      print("Одеты \(color) \(title)")
  }   

}

class ClothesFactory {

  static let shared = ClothesFactory()
  private init() { } //заприватим инициаизатор. чтобы не давало создавать объекты этого класса

func createClothes(type:ClothesType ) → Clothes {

   switch type {
   case .head: return Hat()
   case .shoes:return Shoes()
       
   default:
       fatalError("Unsupported")
   }
   

} }

Тестирование паттерна let hat = ClothesFactory.shared.createClothes(type: .head) let shoes = ClothesFactory.shared.createClothes(type: .shoes) let hat2 = ClothesFactory.shared.createClothes(type: .head) var clothes: [Clothes] = [hat,shoes,hat2] for clothes1 in clothes { clothes1.putOn() }

  • /sites/data/attic/fabrika.1713885025.txt.gz
  • Последнее изменение: 2024/04/23 15:10
  • oresh.dm