Skip to content

Commit f73614f

Browse files
author
Chris
committed
CalendarFactory.
1 parent 605f7c4 commit f73614f

File tree

5 files changed

+82
-7
lines changed

5 files changed

+82
-7
lines changed

Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
B9E9975721DC9C6300D7FA35 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B9E9975521DC9C6300D7FA35 /* Main.storyboard */; };
1313
B9E9975921DC9C6400D7FA35 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B9E9975821DC9C6400D7FA35 /* Assets.xcassets */; };
1414
B9E9975C21DC9C6400D7FA35 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B9E9975A21DC9C6400D7FA35 /* LaunchScreen.storyboard */; };
15+
B9E9976421DC9CC800D7FA35 /* CalendarFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9E9976321DC9CC800D7FA35 /* CalendarFactory.swift */; };
1516
/* End PBXBuildFile section */
1617

1718
/* Begin PBXFileReference section */
@@ -22,6 +23,7 @@
2223
B9E9975821DC9C6400D7FA35 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
2324
B9E9975B21DC9C6400D7FA35 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
2425
B9E9975D21DC9C6400D7FA35 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
26+
B9E9976321DC9CC800D7FA35 /* CalendarFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarFactory.swift; sourceTree = "<group>"; };
2527
/* End PBXFileReference section */
2628

2729
/* Begin PBXFrameworksBuildPhase section */
@@ -54,6 +56,7 @@
5456
B9E9975021DC9C6300D7FA35 /* AbstractFactoryDemo */ = {
5557
isa = PBXGroup;
5658
children = (
59+
B9E9976321DC9CC800D7FA35 /* CalendarFactory.swift */,
5760
B9E9975121DC9C6300D7FA35 /* AppDelegate.swift */,
5861
B9E9975321DC9C6300D7FA35 /* ViewController.swift */,
5962
B9E9975521DC9C6300D7FA35 /* Main.storyboard */,
@@ -136,6 +139,7 @@
136139
buildActionMask = 2147483647;
137140
files = (
138141
B9E9975421DC9C6300D7FA35 /* ViewController.swift in Sources */,
142+
B9E9976421DC9CC800D7FA35 /* CalendarFactory.swift in Sources */,
139143
B9E9975221DC9C6300D7FA35 /* AppDelegate.swift in Sources */,
140144
);
141145
runOnlyForDeploymentPostprocessing = 0;

Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/AppDelegate.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// AppDelegate.swift
33
// AbstractFactoryDemo
44
//
5-
// Created by Chris Huang 黃信文 (奧圖碼) on 2019/1/2.
5+
// Created by Chris on 2019/1/2.
66
// Copyright © 2019 Chris. All rights reserved.
77
//
88

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
//
2+
// CalendarFactory.swift
3+
// AbstractFactoryDemo
4+
//
5+
// Created by Chris on 2019/1/2.
6+
// Copyright © 2019 Chris. All rights reserved.
7+
//
8+
9+
import Foundation
10+
11+
protocol Calendar {
12+
var accessToken: String { get }
13+
var refreshToken: String { get }
14+
var userName: String { get }
15+
}
16+
17+
private struct Google: Calendar {
18+
var accessToken: String
19+
var refreshToken: String
20+
var userName: String
21+
}
22+
23+
private struct Microsoft: Calendar {
24+
var accessToken: String
25+
var refreshToken: String
26+
var userName: String
27+
}
28+
29+
protocol CalendarFactory {
30+
func createCalendar() -> Calendar?
31+
}
32+
33+
class GoogleCalendarFactory: CalendarFactory {
34+
35+
func createCalendar() -> Calendar? {
36+
return Google(accessToken: "Google", refreshToken: "", userName: "")
37+
}
38+
}
39+
40+
class MicrosoftCalendarFactory: CalendarFactory {
41+
func createCalendar() -> Calendar? {
42+
return Microsoft(accessToken: "Microsoft", refreshToken: "", userName: "")
43+
}
44+
}
45+
46+
enum CalType: String {
47+
case microsoft = "Microsoft"
48+
case google = "Google"
49+
}
50+
51+
class CalendarBuilder {
52+
private var platform: String
53+
private var factory: CalendarFactory?
54+
55+
init(platform: String) {
56+
self.platform = platform
57+
}
58+
59+
func initFactory() -> Void {
60+
if nil != factory { return }
61+
62+
if platform == CalType.google.rawValue {
63+
factory = GoogleCalendarFactory()
64+
} else {
65+
factory = MicrosoftCalendarFactory()
66+
}
67+
}
68+
69+
func buildCalendar() -> Calendar {
70+
initFactory()
71+
return (factory?.createCalendar())!
72+
}
73+
74+
}

Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/ViewController.swift

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,16 @@
22
// ViewController.swift
33
// AbstractFactoryDemo
44
//
5-
// Created by Chris Huang 黃信文 (奧圖碼) on 2019/1/2.
5+
// Created by Chris on 2019/1/2.
66
// Copyright © 2019 Chris. All rights reserved.
77
//
88

99
import UIKit
1010

1111
class ViewController: UIViewController {
12-
12+
1313
override func viewDidLoad() {
14-
super.viewDidLoad()
15-
// Do any additional setup after loading the view, typically from a nib.
14+
super.viewDidLoad()
1615
}
17-
18-
1916
}
2017

0 commit comments

Comments
 (0)