• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Swift简单工厂模式、工厂方法模式、抽象工厂模式解析

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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)

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[Swift]R.swift的安装和使用发布时间:2022-07-13
下一篇:
[Swift]LeetCode316.去除重复字母|RemoveDuplicateLetters发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap