-
Notifications
You must be signed in to change notification settings - Fork 0
/
AbstractFactory.cs
130 lines (104 loc) · 3.18 KB
/
AbstractFactory.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
using System;
namespace AbstractFactory
{
// ABSTRACT FACTORY
public abstract class AbstractFactory
{
public abstract Application CreateMobileApp();
public abstract Application CreateWebApp();
}
// CONCRETE FACTORY 1
public class CompanyRegedit : AbstractFactory
{
public override Application CreateMobileApp()
{
return new MobileApplicationForRegedit("Regedit App", MobileOS.iOS);
}
public override Application CreateWebApp()
{
return new WebApplicationForRegedit("Regedit Web App", TypeWebSite.adapted);
}
}
// CONCRETE FACTORY 2
public class CompanyJukebox: AbstractFactory
{
public override Application CreateMobileApp()
{
return new MobileApplicationForJukebox("Jukebox App", MobileOS.Android);
}
public override Application CreateWebApp()
{
return new WebApplicationForJukebox("Jukebox Web App", TypeWebSite.simple);
}
}
// ABSTRACT APPLICATION
public abstract class Application
{
public string name { get; private set; }
public Application(string name)
{
this.name = name;
}
public abstract void OpenApp();
}
// CONCRETE MOBILE APPLICATION 1
public enum MobileOS
{
iOS, Android
}
public class MobileApplicationForRegedit: Application
{
public MobileOS typeOS { get; private set; }
public MobileApplicationForRegedit(string name, MobileOS os): base(name)
{
this.typeOS = os;
}
public override void OpenApp()
{
Console.WriteLine($"Regedit create app: {this.name} with os: {this.typeOS}");
}
}
// CONCRETE MOBILE APPLICATION 2
public class MobileApplicationForJukebox : Application
{
public MobileOS TypeOS { get; private set; }
public MobileApplicationForJukebox(string name, MobileOS os) : base(name)
{
this.TypeOS = os;
}
public override void OpenApp()
{
Console.WriteLine($"Jukebox create app: {this.name} with os: {this.TypeOS}");
}
}
// CONCRETE WEB APPLICATION 1
public enum TypeWebSite
{
simple, adapted
}
public class WebApplicationForRegedit : Application
{
public TypeWebSite TypeSite { get; private set; }
public WebApplicationForRegedit(string name, TypeWebSite browser) : base(name)
{
this.TypeSite = browser;
}
public override void OpenApp()
{
Console.WriteLine($"Regedit create web app: {this.name} with type: {this.TypeSite}");
}
}
// CONCRETE WEB APPLICATION 2
public class WebApplicationForJukebox : Application
{
public TypeWebSite TypeSite { get; private set; }
public WebApplicationForJukebox(string name, TypeWebSite browser) : base(name)
{
this.TypeSite = browser;
}
public override void OpenApp()
{
Console.WriteLine($"Jukebox create web app: {this.name} with type: {this.TypeSite}");
}
}
}