Skip to content

Commit b022771

Browse files
Olego.musinabishekaditya
authored
mediatorPatternAdded (#17)
Co-authored-by: o.musin <o.musin@tinkoff.ru> Co-authored-by: Abishek Aditya <abishekaditya@outlook.com>
1 parent 31bc935 commit b022771

File tree

10 files changed

+153
-0
lines changed

10 files changed

+153
-0
lines changed

DesignPatternsDotNetCore.sln

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PrototypePattern", "Prototy
3636
EndProject
3737
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BuilderPattern", "BuilderPattern\BuilderPattern\BuilderPattern.csproj", "{D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}"
3838
EndProject
39+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediatorPattern", "MediatorPattern\MediatorPattern.csproj", "{82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}"
40+
EndProject
3941
Global
4042
GlobalSection(SolutionConfigurationPlatforms) = preSolution
4143
Debug|Any CPU = Debug|Any CPU
@@ -226,6 +228,42 @@ Global
226228
{182B58DC-6787-4A09-8BCF-87A96737E5A6}.Release|x64.Build.0 = Release|Any CPU
227229
{182B58DC-6787-4A09-8BCF-87A96737E5A6}.Release|x86.ActiveCfg = Release|Any CPU
228230
{182B58DC-6787-4A09-8BCF-87A96737E5A6}.Release|x86.Build.0 = Release|Any CPU
231+
{9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
232+
{9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
233+
{9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Debug|x64.ActiveCfg = Debug|Any CPU
234+
{9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Debug|x64.Build.0 = Debug|Any CPU
235+
{9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Debug|x86.ActiveCfg = Debug|Any CPU
236+
{9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Debug|x86.Build.0 = Debug|Any CPU
237+
{9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
238+
{9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Release|Any CPU.Build.0 = Release|Any CPU
239+
{9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Release|x64.ActiveCfg = Release|Any CPU
240+
{9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Release|x64.Build.0 = Release|Any CPU
241+
{9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Release|x86.ActiveCfg = Release|Any CPU
242+
{9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Release|x86.Build.0 = Release|Any CPU
243+
{B703B66A-310A-45BC-94C9-EEEB57570E16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
244+
{B703B66A-310A-45BC-94C9-EEEB57570E16}.Debug|Any CPU.Build.0 = Debug|Any CPU
245+
{B703B66A-310A-45BC-94C9-EEEB57570E16}.Debug|x64.ActiveCfg = Debug|Any CPU
246+
{B703B66A-310A-45BC-94C9-EEEB57570E16}.Debug|x64.Build.0 = Debug|Any CPU
247+
{B703B66A-310A-45BC-94C9-EEEB57570E16}.Debug|x86.ActiveCfg = Debug|Any CPU
248+
{B703B66A-310A-45BC-94C9-EEEB57570E16}.Debug|x86.Build.0 = Debug|Any CPU
249+
{B703B66A-310A-45BC-94C9-EEEB57570E16}.Release|Any CPU.ActiveCfg = Release|Any CPU
250+
{B703B66A-310A-45BC-94C9-EEEB57570E16}.Release|Any CPU.Build.0 = Release|Any CPU
251+
{B703B66A-310A-45BC-94C9-EEEB57570E16}.Release|x64.ActiveCfg = Release|Any CPU
252+
{B703B66A-310A-45BC-94C9-EEEB57570E16}.Release|x64.Build.0 = Release|Any CPU
253+
{B703B66A-310A-45BC-94C9-EEEB57570E16}.Release|x86.ActiveCfg = Release|Any CPU
254+
{B703B66A-310A-45BC-94C9-EEEB57570E16}.Release|x86.Build.0 = Release|Any CPU
255+
{82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
256+
{82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Debug|Any CPU.Build.0 = Debug|Any CPU
257+
{82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Debug|x64.ActiveCfg = Debug|Any CPU
258+
{82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Debug|x64.Build.0 = Debug|Any CPU
259+
{82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Debug|x86.ActiveCfg = Debug|Any CPU
260+
{82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Debug|x86.Build.0 = Debug|Any CPU
261+
{82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Release|Any CPU.ActiveCfg = Release|Any CPU
262+
{82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Release|Any CPU.Build.0 = Release|Any CPU
263+
{82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Release|x64.ActiveCfg = Release|Any CPU
264+
{82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Release|x64.Build.0 = Release|Any CPU
265+
{82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Release|x86.ActiveCfg = Release|Any CPU
266+
{82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Release|x86.Build.0 = Release|Any CPU
229267
{2DC00E3D-2099-4C58-B98F-B6B3F285739F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
230268
{2DC00E3D-2099-4C58-B98F-B6B3F285739F}.Debug|Any CPU.Build.0 = Debug|Any CPU
231269
{2DC00E3D-2099-4C58-B98F-B6B3F285739F}.Debug|x64.ActiveCfg = Debug|Any CPU

MediatorPattern/Colleague.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
namespace MediatorPattern
2+
{
3+
abstract class Colleague
4+
{
5+
protected Mediator mediator;
6+
7+
public Colleague(Mediator mediator) => this.mediator = mediator;
8+
9+
public virtual void Send(string message) => this.mediator.Send(message, this);
10+
11+
public abstract void Notify(string message);
12+
13+
}
14+
}

MediatorPattern/Customer.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System;
2+
3+
namespace MediatorPattern
4+
{
5+
class Customer : Colleague
6+
{
7+
public Customer(Mediator mediator) : base(mediator) {}
8+
9+
public override void Notify(string message)
10+
{
11+
Console.WriteLine($"Message to customer: {message}");
12+
}
13+
}
14+
}

MediatorPattern/ManagerMediator.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
namespace MediatorPattern
2+
{
3+
class ManagerMediator : Mediator
4+
{
5+
public Colleague Customer { get; set; }
6+
public Colleague Programmer { get; set; }
7+
public Colleague Tester { get; set; }
8+
9+
public override void Send(string message, Colleague colleague)
10+
{
11+
if (colleague == Customer)
12+
{
13+
Programmer.Notify(message);
14+
}
15+
else if (colleague == Programmer)
16+
{
17+
Tester.Notify(message);
18+
}
19+
else Customer.Notify(message);
20+
}
21+
}
22+
}

MediatorPattern/Mediator.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace MediatorPattern
2+
{
3+
abstract class Mediator
4+
{
5+
public abstract void Send(string message, Colleague colleague);
6+
}
7+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<TargetFramework>netcoreapp2.1</TargetFramework>
6+
</PropertyGroup>
7+
8+
</Project>

MediatorPattern/Program.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using System;
2+
3+
namespace MediatorPattern
4+
{
5+
class Program
6+
{
7+
static void Main(string[] args)
8+
{
9+
var mediator = new ManagerMediator();
10+
var customer = new Customer(mediator);
11+
var programmer = new Programmer(mediator);
12+
var tester = new Tester(mediator);
13+
mediator.Customer = customer;
14+
mediator.Programmer = programmer;
15+
mediator.Tester = tester;
16+
customer.Send("We have an order, need to make a program");
17+
programmer.Send("I have done program, need to test it");
18+
tester.Send("I have done testing, here is ready program for you");
19+
}
20+
}
21+
}

MediatorPattern/Programmer.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System;
2+
3+
namespace MediatorPattern
4+
{
5+
class Programmer : Colleague
6+
{
7+
public Programmer(Mediator mediator) : base(mediator) {}
8+
9+
public override void Notify(string message)
10+
{
11+
Console.WriteLine($"Message to programmer: {message}");
12+
}
13+
}
14+
}

MediatorPattern/Tester.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System;
2+
3+
namespace MediatorPattern
4+
{
5+
class Tester : Colleague
6+
{
7+
public Tester(Mediator mediator) : base(mediator) {}
8+
9+
public override void Notify(string message)
10+
{
11+
Console.WriteLine($"Message to tester: {message}");
12+
}
13+
}
14+
}

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,4 @@ There are three kinds of Design Patterns
3131
* [Strategy](/StrategyPattern)
3232
* [Template](/TemplatePattern)
3333
* [Visitor](/VisitorPattern)
34+
* [Mediator](/MediatorPattern)

0 commit comments

Comments
 (0)