From 57427949621a4e6c395502c90412fe9f1f3f1e8a Mon Sep 17 00:00:00 2001 From: thutasann Date: Sun, 26 May 2024 15:38:58 +0800 Subject: [PATCH] add: proxy pattern --- design-patterns/Program.cs | 6 ++++- design-patterns/README.md | 5 +++++ design-patterns/docs/proxy.png | Bin 0 -> 60501 bytes .../src/Proxy/ISuperSecretDatabase.cs | 7 ++++++ design-patterns/src/Proxy/ProxyUsage.cs | 12 ++++++++++ .../src/Proxy/SuperSecretDatabase.cs | 15 +++++++++++++ .../src/Proxy/SuperSecretDatabaseProxy.cs | 21 ++++++++++++++++++ 7 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 design-patterns/docs/proxy.png create mode 100644 design-patterns/src/Proxy/ISuperSecretDatabase.cs create mode 100644 design-patterns/src/Proxy/ProxyUsage.cs create mode 100644 design-patterns/src/Proxy/SuperSecretDatabase.cs create mode 100644 design-patterns/src/Proxy/SuperSecretDatabaseProxy.cs diff --git a/design-patterns/Program.cs b/design-patterns/Program.cs index 020f50e..741ef65 100644 --- a/design-patterns/Program.cs +++ b/design-patterns/Program.cs @@ -1,6 +1,7 @@ using design_patterns.src.Adapter; using design_patterns.src.Facade; using design_patterns.src.Factory; +using design_patterns.src.Proxy; using design_patterns.src.Singleton; using design_patterns.src.Singleton.EcommerceSample; @@ -17,4 +18,7 @@ FacadeUsage.SampleOne(); Console.WriteLine("\n---------------- Adapter Pattern 🚀"); -AdapterUsage.SampleOne(); \ No newline at end of file +AdapterUsage.SampleOne(); + +Console.WriteLine("\n---------------- Proxy Pattern 🚀"); +ProxyUsage.SampleOne(); \ No newline at end of file diff --git a/design-patterns/README.md b/design-patterns/README.md index 59ecb3c..32523a0 100644 --- a/design-patterns/README.md +++ b/design-patterns/README.md @@ -20,9 +20,14 @@ In this section, Design patterns in c# will be included. ![Adapter Pattern](./docs/adapter.png) +### Proxy Pattern + +![Proxy Pattern](./docs/proxy.png) + ## Resources - https://www.c-sharpcorner.com/UploadFile/8911c4/singleton-design-pattern-in-C-Sharp/ - https://www.c-sharpcorner.com/article/factory-design-pattern-in-c-sharp/ - https://www.c-sharpcorner.com/article/facade-design-pattern-using-c-sharp/ - https://www.c-sharpcorner.com/UploadFile/efa3cf/adapter-design-pattern-in-C-Sharp/ +- https://www.c-sharpcorner.com/UploadFile/b1df45/proxy-design-pattern-using-C-Sharp/ diff --git a/design-patterns/docs/proxy.png b/design-patterns/docs/proxy.png new file mode 100644 index 0000000000000000000000000000000000000000..1641b71913794cd52c1fab9a57ad70decc921267 GIT binary patch literal 60501 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 + /// Super Secret Database + /// + public class SuperSecretDatabase(string databaseName) : ISuperSecretDatabase + { + private readonly string _databaseName = databaseName; + + public void DisplayDatabaseName() + { + Console.WriteLine("Display database name : " + _databaseName); + } + } +} \ No newline at end of file diff --git a/design-patterns/src/Proxy/SuperSecretDatabaseProxy.cs b/design-patterns/src/Proxy/SuperSecretDatabaseProxy.cs new file mode 100644 index 0000000..b3dde71 --- /dev/null +++ b/design-patterns/src/Proxy/SuperSecretDatabaseProxy.cs @@ -0,0 +1,21 @@ +namespace design_patterns.src.Proxy +{ + public class SuperSecretDatabaseProxy(string databaseName, string password) : ISuperSecretDatabase + { + private SuperSecretDatabase? superSecretDatabase; + private readonly string databaseName = databaseName; + private readonly string password = password; + + public void DisplayDatabaseName() + { + if (password.Equals("Password")) + { + if (superSecretDatabase == null) + { + superSecretDatabase = new(databaseName); + } + superSecretDatabase!.DisplayDatabaseName(); + } + } + } +} \ No newline at end of file