zoukankan      html  css  js  c++  java
  • Swift 简单工厂模式、工厂方法模式、抽象工厂模式解析

    1. 简单工厂模式

    • 一个工厂类
    • 内部用 switch case 创建不同对象
     1 import UIKit
     2 
     3 protocol Service {
     4     var url: URL { get }
     5 }
     6 
     7 // dev阶段
     8 class StagingService: Service {
     9     var url: URL { return URL(string: "https://dev.localhost/")! }
    10 }
    11 
    12 // product阶段
    13 class ProductionService: Service {
    14     var url: URL { return URL(string: "https://live.localhost/")! }
    15 }
    16 
    17 class EnvironmentFactory {
    18     enum Environment {
    19         case staging
    20         case production
    21     }
    22     
    23     func create(_ environment:Environment) -> Service{
    24         switch environment {
    25         case .staging:
    26             return StagingService()
    27         case .production:
    28             return ProductionService()
    29         }
    30     }
    31 }
    32 
    33 let env = EnvironmentFactory()
    34 let serv = env.create(.production)
    35 print(serv.url) //https://live.localhost/

    2. 工厂方法模式

    • 多个 (解耦的) 工厂类
    • 每个工厂方法创建一个实例
     1 import UIKit
     2 
     3 protocol Service {
     4     var url: URL { get }
     5 }
     6 
     7 protocol ServiceFactory{
     8     func create() -> Service
     9 }
    10 
    11 // dev阶段
    12 class StagingService: Service {
    13     var url: URL { return URL(string: "https://dev.localhost/")! }
    14 }
    15 
    16 // product阶段
    17 class ProductionService: Service {
    18     var url: URL { return URL(string: "https://live.localhost/")! }
    19 }
    20 
    21 // dev 工厂类
    22 class StagingServiceFactory: ServiceFactory{
    23     func create() -> Service {
    24         return StagingService()
    25     }
    26 }
    27 
    28 // production 工厂类
    29 class ProductionServiceFactory: ServiceFactory{
    30     func create() -> Service {
    31         return ProductionService()
    32     }
    33 }
    34 
    35 let serv = ProductionServiceFactory().create()
    36 print(serv.url)

    3. 抽象工厂模式

    • 通过工厂方法组合简单工厂
     1 import UIKit
     2 
     3 // 服务协议
     4 protocol ServiceFactory {
     5     // 创建一个服务
     6     func create() -> Service
     7 }
     8 
     9 protocol Service {
    10     var url: URL { get }
    11 }
    12 
    13 // dev阶段
    14 class StagingService: Service {
    15     var url: URL { return URL(string: "https://dev.localhost/")! }
    16 }
    17 
    18 class StagingServiceFactory: ServiceFactory {
    19     // dev工厂就是创建一个dev的服务
    20     func create() -> Service {
    21         return StagingService()
    22     }
    23 }
    24 
    25 // product阶段
    26 class ProductionService: Service {
    27     var url: URL { return URL(string: "https://live.localhost/")! }
    28 }
    29 
    30 class ProductionServiceFactory: ServiceFactory {
    31     // product工厂就是创建一个product的服务
    32     func create() -> Service {
    33         return ProductionService()
    34     }
    35 }
    36 
    37 // 抽象工厂
    38 class AppServiceFactory: ServiceFactory {
    39 
    40     enum Environment {
    41         case production
    42         case staging
    43     }
    44     
    45     var env: Environment
    46 
    47     init(env: Environment) {
    48         self.env = env
    49     }
    50 
    51     func create() -> Service {
    52         switch self.env {
    53         case .production:
    54             return ProductionServiceFactory().create()
    55         case .staging:
    56             return StagingServiceFactory().create()
    57         }
    58     }
    59 }
    60 
    61 let factory = AppServiceFactory(env: .production)
    62 let service = factory.create()
    63 print(service.url)
  • 相关阅读:
    Django 数据库常用字段类型、选项参数、外键约束
    Django 项目基础配置
    MySQL连接列值
    SQL 限制查询结果
    python+appium+真机测试
    P3089 [USACO13NOV]POGO的牛Pogo-Cow
    P2889 [USACO07NOV]挤奶的时间Milking Time
    P2679 子串
    P3932 浮游大陆的68号岛
    P1514 引水入城
  • 原文地址:https://www.cnblogs.com/streakingBird/p/12605343.html
Copyright © 2011-2022 走看看