diff --git a/DesignPattern.Observer.WithDelegate/DesignPattern.Observer.WithDelegate.csproj b/DesignPattern.Observer.WithDelegate/DesignPattern.Observer.WithDelegate.csproj new file mode 100644 index 0000000..74abf5c --- /dev/null +++ b/DesignPattern.Observer.WithDelegate/DesignPattern.Observer.WithDelegate.csproj @@ -0,0 +1,10 @@ + + + + Exe + net6.0 + enable + enable + + + diff --git a/DesignPattern.Observer.WithDelegate/IObserver.cs b/DesignPattern.Observer.WithDelegate/IObserver.cs new file mode 100644 index 0000000..05a7075 --- /dev/null +++ b/DesignPattern.Observer.WithDelegate/IObserver.cs @@ -0,0 +1,10 @@ +namespace DesignPattern.Observer; + +public interface IObserver +{ + public int Score { get; set; } + public void Update(int score) + { + Score = score; + } +} diff --git a/DesignPattern.Observer.WithDelegate/ISubject.cs b/DesignPattern.Observer.WithDelegate/ISubject.cs new file mode 100644 index 0000000..c3001d5 --- /dev/null +++ b/DesignPattern.Observer.WithDelegate/ISubject.cs @@ -0,0 +1,8 @@ +namespace DesignPattern.Observer; + +public interface ISubject +{ + void Add(IObserver observer); + void Remove(IObserver observer); + void Notify(int score); +} diff --git a/DesignPattern.Observer.WithDelegate/Parent.cs b/DesignPattern.Observer.WithDelegate/Parent.cs new file mode 100644 index 0000000..31bd7e7 --- /dev/null +++ b/DesignPattern.Observer.WithDelegate/Parent.cs @@ -0,0 +1,11 @@ +namespace DesignPattern.Observer; + +public class Parent : IObserver +{ + public int Score { get; set; } = 15; + + public override string ToString() + { + return "Parent Score: " + Score; + } +} diff --git a/DesignPattern.Observer.WithDelegate/Program.cs b/DesignPattern.Observer.WithDelegate/Program.cs new file mode 100644 index 0000000..c8b54d7 --- /dev/null +++ b/DesignPattern.Observer.WithDelegate/Program.cs @@ -0,0 +1,22 @@ +using DesignPattern.Observer; + +Subject subject = new Subject(); +var student = new Student(); +var parent = new Parent(); +var support = new Support(); + +subject.Add(student); +subject.Add(parent); +subject.Add(support); + +subject.Score = 17; + +subject.Remove(parent); + +subject.Score = 7; + +Console.WriteLine(student.ToString()); +Console.WriteLine(parent.ToString()); +Console.WriteLine(support.ToString()); + +Console.ReadKey(); \ No newline at end of file diff --git a/DesignPattern.Observer.WithDelegate/Student.cs b/DesignPattern.Observer.WithDelegate/Student.cs new file mode 100644 index 0000000..f0abd7f --- /dev/null +++ b/DesignPattern.Observer.WithDelegate/Student.cs @@ -0,0 +1,11 @@ +namespace DesignPattern.Observer; + +public class Student : IObserver +{ + public int Score { get; set; } = 0; + + public override string ToString() + { + return "Student Score: " + Score; + } +} diff --git a/DesignPattern.Observer.WithDelegate/Subject.cs b/DesignPattern.Observer.WithDelegate/Subject.cs new file mode 100644 index 0000000..d09c53b --- /dev/null +++ b/DesignPattern.Observer.WithDelegate/Subject.cs @@ -0,0 +1,38 @@ +namespace DesignPattern.Observer; + +public class Subject : ISubject +{ + public delegate void Updater(int score); + + private Updater? updaters; + + public int Score + { + set + { + Notify(value); + } + } + public Subject() { } + + public void Add(IObserver observer) + { + updaters += observer.Update; + } + + public void Remove(IObserver observer) + { + updaters -= observer.Update; + } + + public void Notify(int score) + { + //foreach (var observer in observers) + //{ + // observer.Update(20); + //} + + if (updaters is not null) + updaters(score); + } +} diff --git a/DesignPattern.Observer.WithDelegate/Support.cs b/DesignPattern.Observer.WithDelegate/Support.cs new file mode 100644 index 0000000..8928323 --- /dev/null +++ b/DesignPattern.Observer.WithDelegate/Support.cs @@ -0,0 +1,11 @@ +namespace DesignPattern.Observer; + +public class Support : IObserver +{ + public int Score { get; set; } = 8; + + public override string ToString() + { + return "Support Score: " + Score; + } +} \ No newline at end of file diff --git a/DesignPatternsSln.sln b/DesignPatternsSln.sln index a4ca1ef..fe3f42d 100644 --- a/DesignPatternsSln.sln +++ b/DesignPatternsSln.sln @@ -13,9 +13,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Behavioral", "Behavioral", EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Observers", "Observers", "{3EBD3060-2125-4B77-B802-9D3BB30C4A69}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesignPattern.Observer", "DesignPattern.Observer\DesignPattern.Observer.csproj", "{2A5FDACE-5DDE-4216-92F0-6752D1164862}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DesignPattern.Observer", "DesignPattern.Observer\DesignPattern.Observer.csproj", "{2A5FDACE-5DDE-4216-92F0-6752D1164862}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesignPattern.Observer.WithMarker", "DesignPattern.Observer.WithMarker\DesignPattern.Observer.WithMarker.csproj", "{BACC3D89-38DC-443F-BE56-1F1C6C63408F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DesignPattern.Observer.WithMarker", "DesignPattern.Observer.WithMarker\DesignPattern.Observer.WithMarker.csproj", "{BACC3D89-38DC-443F-BE56-1F1C6C63408F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesignPattern.Observer.WithDelegate", "DesignPattern.Observer.WithDelegate\DesignPattern.Observer.WithDelegate.csproj", "{9D21F7B3-2876-429E-98E7-0B1C19C6C0EC}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -31,6 +33,10 @@ Global {BACC3D89-38DC-443F-BE56-1F1C6C63408F}.Debug|Any CPU.Build.0 = Debug|Any CPU {BACC3D89-38DC-443F-BE56-1F1C6C63408F}.Release|Any CPU.ActiveCfg = Release|Any CPU {BACC3D89-38DC-443F-BE56-1F1C6C63408F}.Release|Any CPU.Build.0 = Release|Any CPU + {9D21F7B3-2876-429E-98E7-0B1C19C6C0EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9D21F7B3-2876-429E-98E7-0B1C19C6C0EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9D21F7B3-2876-429E-98E7-0B1C19C6C0EC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9D21F7B3-2876-429E-98E7-0B1C19C6C0EC}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -42,6 +48,7 @@ Global {3EBD3060-2125-4B77-B802-9D3BB30C4A69} = {C40F78D1-E305-45D6-AA98-D4BF7BA60DDB} {2A5FDACE-5DDE-4216-92F0-6752D1164862} = {3EBD3060-2125-4B77-B802-9D3BB30C4A69} {BACC3D89-38DC-443F-BE56-1F1C6C63408F} = {3EBD3060-2125-4B77-B802-9D3BB30C4A69} + {9D21F7B3-2876-429E-98E7-0B1C19C6C0EC} = {3EBD3060-2125-4B77-B802-9D3BB30C4A69} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BA635945-9BC8-4FB5-AB66-9B1DC002F830}