-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDecoratorPattern.cs
135 lines (110 loc) · 2.49 KB
/
DecoratorPattern.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
131
132
133
134
135
using System;
using System.Collections.Generic;
public interface IAircraft
{
void Fly();
void Land();
float GetWeight();
}
public class Boeing747 : IAircraft
{
float baseWeight = 100f;
public void Fly()
{
Console.WriteLine("Boeing747 flying");
}
public float GetWeight()
{
return baseWeight;
}
public void Land()
{
Console.WriteLine("Boeing747 landed");
}
}
public class F16 : IAircraft
{
float baseWeight = 60f;
public void Fly()
{
Console.WriteLine("F16 flying");
}
public float GetWeight()
{
return baseWeight;
}
public void Land()
{
Console.WriteLine("F16 landed");
}
}
// decorator
public abstract class AircraftDecorator : IAircraft
{
public abstract void Fly();
public abstract float GetWeight();
public abstract void Land();
}
// concrete decorator
public class LuxuryFitting : AircraftDecorator
{
private float weight = 20f;
IAircraft aircraft;
public LuxuryFitting(IAircraft aircraft)
{
this.aircraft = aircraft;
}
public override void Fly()
{
this.aircraft.Fly();
}
public override float GetWeight()
{
return this.weight + this.aircraft.GetWeight();
}
public override void Land()
{
this.aircraft.Land();
}
}
// concrete decorator
public class BulletProofFitting : AircraftDecorator
{
private float weight = 10f;
IAircraft aircraft;
public BulletProofFitting(IAircraft aircraft)
{
this.aircraft = aircraft;
}
public override void Fly()
{
this.aircraft.Fly();
}
public override float GetWeight()
{
return this.weight + this.aircraft.GetWeight();
}
public override void Land()
{
this.aircraft.Land();
}
}
public class DecoratorPattern
{
public static void Main(String[] args)
{
List<IAircraft> aircrafts = new List<IAircraft>();
IAircraft simpleBoeing747 = new Boeing747();
IAircraft luxuryBoeing747 = new LuxuryFitting(simpleBoeing747);
aircrafts.Add(luxuryBoeing747);
IAircraft simpleF16 = new F16();
IAircraft bulletProofF16 = new BulletProofFitting(simpleF16);
aircrafts.Add(bulletProofF16);
foreach (IAircraft aircraft in aircrafts)
{
aircraft.Fly();
aircraft.Land();
Console.WriteLine($"The final weight of the aircraft is {aircraft.GetWeight()}");
}
}
}