Фабричный метод (Виртуальный конструктор)
Это порождающий паттерн проектирования, который определяет общий интерфейс для создания объектов в суперклассе, позволяя подсклассам изменять тип создаваемых объектов.
- Избавляет класс от привязки к конкретным классам продуктов (завязываемся на тип протокола)
- Выделяет код производства продуктов в одно место, упрощая поддержку кода (знаем, если мы хотим что-то изменить, то идем в конкретное место, а не по всему проекту бегаем)
- упрощает добавление новых продуктов в программу
- Реализует принцип открытости / закрытости (2 принцип солида) (основные принципы ООП)
- Может привести к созданию больших параллельных иерархий классов, так как для каждого класса продукта надо создать свой подкласс создателя
protocol Vehicle {
var type: String { get }
func startPoint()
func endPoint()
}
enum Transport {
case bus, plane, supercar, train
}
class Singletone {
static let shared = Singletone()
func createDrive(type: Transport) -> Vehicle {
switch type {
case .bus:
return Bus()
case .plane:
return Plane()
case .supercar:
return SuperCar()
case .train:
return Train()
}
}
}
class Bus: Vehicle {
var type: String = "Bus"
func startPoint() {
print("Started transportation by bus")
}
func endPoint() {
print("Bus transportation ended")
}
}
func chooseTransport(name: Transport) {
let option = Singletone.shared.createDrive(type: name)
arrayDrives.append(option)
}
func printResult() {
for i in arrayDrives {
i.startPoint()
i.endPoint()
}
}
override func viewDidLoad() {
super.viewDidLoad()
chooseTransport(name: .bus)
printResult()
}
- Swift 4.2
- iOS 12 or higher
- Alexandr Kustov - ELEV0
- If you found a bug, open an issue.
- If you have a feature request, open an issue.
- If you want to contribute, submit a pull request.
This project is licensed under the MIT License.