From 695fb26ce487043871683f33acad33c686407ccf Mon Sep 17 00:00:00 2001 From: "Federico Pasqua (eisterman)" Date: Thu, 30 Oct 2025 14:46:26 +0100 Subject: [PATCH] Initial Commit (w/ Ch1Duck first implementation) --- .gitignore | 5 ++++ .../.idea/.gitignore | 13 +++++++++++ .../.idea/encodings.xml | 4 ++++ .../.idea/indexLayout.xml | 8 +++++++ .../.idea/vcs.xml | 6 +++++ Ch1Duck/Ch1Duck.csproj | 11 +++++++++ Ch1Duck/Duck.cs | 19 +++++++++++++++ Ch1Duck/Fly.cs | 17 ++++++++++++++ Ch1Duck/Program.cs | 7 ++++++ Ch1Duck/Quack.cs | 23 +++++++++++++++++++ HeadFirstDesignPatterns.sln | 16 +++++++++++++ 11 files changed, 129 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.idea.HeadFirstDesignPatterns/.idea/.gitignore create mode 100644 .idea/.idea.HeadFirstDesignPatterns/.idea/encodings.xml create mode 100644 .idea/.idea.HeadFirstDesignPatterns/.idea/indexLayout.xml create mode 100644 .idea/.idea.HeadFirstDesignPatterns/.idea/vcs.xml create mode 100644 Ch1Duck/Ch1Duck.csproj create mode 100644 Ch1Duck/Duck.cs create mode 100644 Ch1Duck/Fly.cs create mode 100644 Ch1Duck/Program.cs create mode 100644 Ch1Duck/Quack.cs create mode 100644 HeadFirstDesignPatterns.sln diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..add57be --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +bin/ +obj/ +/packages/ +riderModule.iml +/_ReSharper.Caches/ \ No newline at end of file diff --git a/.idea/.idea.HeadFirstDesignPatterns/.idea/.gitignore b/.idea/.idea.HeadFirstDesignPatterns/.idea/.gitignore new file mode 100644 index 0000000..49da5d7 --- /dev/null +++ b/.idea/.idea.HeadFirstDesignPatterns/.idea/.gitignore @@ -0,0 +1,13 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Rider ignored files +/contentModel.xml +/modules.xml +/.idea.HeadFirstDesignPatterns.iml +/projectSettingsUpdater.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/.idea.HeadFirstDesignPatterns/.idea/encodings.xml b/.idea/.idea.HeadFirstDesignPatterns/.idea/encodings.xml new file mode 100644 index 0000000..df87cf9 --- /dev/null +++ b/.idea/.idea.HeadFirstDesignPatterns/.idea/encodings.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/.idea.HeadFirstDesignPatterns/.idea/indexLayout.xml b/.idea/.idea.HeadFirstDesignPatterns/.idea/indexLayout.xml new file mode 100644 index 0000000..7b08163 --- /dev/null +++ b/.idea/.idea.HeadFirstDesignPatterns/.idea/indexLayout.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/.idea.HeadFirstDesignPatterns/.idea/vcs.xml b/.idea/.idea.HeadFirstDesignPatterns/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/.idea.HeadFirstDesignPatterns/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Ch1Duck/Ch1Duck.csproj b/Ch1Duck/Ch1Duck.csproj new file mode 100644 index 0000000..46e6c92 --- /dev/null +++ b/Ch1Duck/Ch1Duck.csproj @@ -0,0 +1,11 @@ + + + + Exe + net9.0 + latestmajor + enable + enable + + + diff --git a/Ch1Duck/Duck.cs b/Ch1Duck/Duck.cs new file mode 100644 index 0000000..42bf97b --- /dev/null +++ b/Ch1Duck/Duck.cs @@ -0,0 +1,19 @@ +namespace Ch1Duck; + +public abstract class Duck(IFlyBehaviour flyBehaviour, IQuackBehaviour quackBehaviour) { + public abstract void Display(); + + public void PerformFly() { + flyBehaviour.Fly(); + } + + public void PerformQuack() { + quackBehaviour.Quack(); + } +} + +public class MallardDuck() : Duck(new FlyWithWings(), new NormalQuack()) { + public override void Display() { + Console.WriteLine("I'm a real Mallard duck"); + } +} \ No newline at end of file diff --git a/Ch1Duck/Fly.cs b/Ch1Duck/Fly.cs new file mode 100644 index 0000000..a71f2f6 --- /dev/null +++ b/Ch1Duck/Fly.cs @@ -0,0 +1,17 @@ +namespace Ch1Duck; + +public interface IFlyBehaviour { + void Fly(); +} + +public class FlyWithWings: IFlyBehaviour { + public void Fly() { + Console.WriteLine("I'm flying!"); + } +} + +public class FlyNoWay: IFlyBehaviour { + public void Fly() { + Console.WriteLine("I can't fly"); + } +} \ No newline at end of file diff --git a/Ch1Duck/Program.cs b/Ch1Duck/Program.cs new file mode 100644 index 0000000..ee9687f --- /dev/null +++ b/Ch1Duck/Program.cs @@ -0,0 +1,7 @@ +// See https://aka.ms/new-console-template for more information + +using Ch1Duck; + +Duck mallard = new MallardDuck(); +mallard.PerformQuack(); +mallard.PerformFly(); \ No newline at end of file diff --git a/Ch1Duck/Quack.cs b/Ch1Duck/Quack.cs new file mode 100644 index 0000000..319058d --- /dev/null +++ b/Ch1Duck/Quack.cs @@ -0,0 +1,23 @@ +namespace Ch1Duck; + +public interface IQuackBehaviour { + void Quack(); +} + +public class NormalQuack: IQuackBehaviour { + public void Quack() { + Console.WriteLine("Quack"); + } +} + +public class MuteQuack : IQuackBehaviour { + public void Quack() { + Console.WriteLine("<< Silence >>"); + } +} + +public class Squeak: IQuackBehaviour { + public void Quack() { + Console.WriteLine("Squeak"); + } +} \ No newline at end of file diff --git a/HeadFirstDesignPatterns.sln b/HeadFirstDesignPatterns.sln new file mode 100644 index 0000000..3b7b763 --- /dev/null +++ b/HeadFirstDesignPatterns.sln @@ -0,0 +1,16 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ch1Duck", "Ch1Duck\Ch1Duck.csproj", "{941002B3-4C8C-4A9A-9071-7FD27E9E5C9F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {941002B3-4C8C-4A9A-9071-7FD27E9E5C9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {941002B3-4C8C-4A9A-9071-7FD27E9E5C9F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {941002B3-4C8C-4A9A-9071-7FD27E9E5C9F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {941002B3-4C8C-4A9A-9071-7FD27E9E5C9F}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal