Различия
Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
|
fabrika [2024/04/23 15:05] oresh.dm создано |
fabrika [2024/04/23 15:15] (текущий) oresh.dm |
||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | Порождающие паттерны - это паттерны, | + | **Порождающие паттерны** - это паттерны, |
| + | **Фабричный метод (англ. 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(" | ||
| + | } | ||
| + | } | ||
| + | |||
| + | class Shoes: | ||
| + | var title: String = " | ||
| + | var type: ClothesType = .shoes | ||
| + | var color: String = " | ||
| + | |||
| + | func putOn() { | ||
| + | print(" | ||
| + | } | ||
| + | } | ||
| + | |||
| + | class ClothesFactory { | ||
| + | static let shared = ClothesFactory() | ||
| + | private init() { } // | ||
| + | |||
| + | func createClothes(type: | ||
| + | | ||
| + | case .head: return Hat() | ||
| + | case .shoes: | ||
| + | |||
| + | | ||
| + | | ||
| + | } | ||
| + | |||
| + | } | ||
| + | } | ||
| + | |||
| + | // | ||
| + | let hat = ClothesFactory.shared.createClothes(type: | ||
| + | let shoes = ClothesFactory.shared.createClothes(type: | ||
| + | let hat2 = ClothesFactory.shared.createClothes(type: | ||
| + | |||
| + | var clothes: [Clothes] = [hat, | ||
| + | |||
| + | for clothes1 in clothes { | ||
| + | clothes1.putOn() | ||
| + | } | ||