diff --git a/Examples/CryptoCurrencyExternalLibrary/CryptoCurrency.cs b/Examples/CryptoCurrencyExternalLibrary/CryptoCurrency.cs new file mode 100644 index 0000000..09c68c7 --- /dev/null +++ b/Examples/CryptoCurrencyExternalLibrary/CryptoCurrency.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CryptoCurrencyExternalLibrary +{ + public class CryptoCurrency + { + public decimal ExternalProcessPayment(decimal amount) + { + return amount; + } + + } +} diff --git a/Examples/CryptoCurrencyExternalLibrary/CryptoCurrencyExternalLibrary.csproj b/Examples/CryptoCurrencyExternalLibrary/CryptoCurrencyExternalLibrary.csproj new file mode 100644 index 0000000..fa71b7a --- /dev/null +++ b/Examples/CryptoCurrencyExternalLibrary/CryptoCurrencyExternalLibrary.csproj @@ -0,0 +1,9 @@ + + + + net8.0 + enable + enable + + + diff --git a/Examples/Examples.sln b/Examples/Examples.sln index 0fd3d0a..21724c1 100644 --- a/Examples/Examples.sln +++ b/Examples/Examples.sln @@ -3,13 +3,15 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.8.35430.204 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UserCode", "..\UserCode\UserCode.csproj", "{03E39C4B-5B4C-4FD2-A79D-AC86704AF3DC}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UserCode", "..\UserCode\UserCode.csproj", "{03E39C4B-5B4C-4FD2-A79D-AC86704AF3DC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExternalClassLibrary", "..\ExternalClassLibrary\ExternalClassLibrary.csproj", "{B77A43A4-BF8D-44E1-B3E8-8F6DD365DEAB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExternalClassLibrary", "..\ExternalClassLibrary\ExternalClassLibrary.csproj", "{B77A43A4-BF8D-44E1-B3E8-8F6DD365DEAB}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "RealExample", "RealExample", "{BEFC8EDE-A568-4AC3-B3EA-B68427103370}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Payment", "..\Payment\Payment.csproj", "{E7F0B3A7-6105-43CB-B4E1-3733111D4EB8}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Payment", "..\Payment\Payment.csproj", "{E7F0B3A7-6105-43CB-B4E1-3733111D4EB8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CryptoCurrencyExternalLibrary", "CryptoCurrencyExternalLibrary\CryptoCurrencyExternalLibrary.csproj", "{CEE91381-0168-4615-9DFA-0440BF0A4085}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -29,6 +31,10 @@ Global {E7F0B3A7-6105-43CB-B4E1-3733111D4EB8}.Debug|Any CPU.Build.0 = Debug|Any CPU {E7F0B3A7-6105-43CB-B4E1-3733111D4EB8}.Release|Any CPU.ActiveCfg = Release|Any CPU {E7F0B3A7-6105-43CB-B4E1-3733111D4EB8}.Release|Any CPU.Build.0 = Release|Any CPU + {CEE91381-0168-4615-9DFA-0440BF0A4085}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CEE91381-0168-4615-9DFA-0440BF0A4085}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CEE91381-0168-4615-9DFA-0440BF0A4085}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CEE91381-0168-4615-9DFA-0440BF0A4085}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/UserCode/Program.cs b/UserCode/Program.cs index 1dd825f..492dc0c 100644 --- a/UserCode/Program.cs +++ b/UserCode/Program.cs @@ -70,6 +70,8 @@ // } //} + + //#endregion //#region 1.2 @@ -530,109 +532,271 @@ //#endregion -#region 1.8 +//#region 1.8 + +//using CryptoCurrencyExternalLibrary; +//using ExternalClassLibrary; +//using System.ComponentModel; + +//public class Program +//{ +// public static void Main() +// { +// var type = Console.ReadLine(); +// ITransport transport = TransportService.Create(type); +// transport.Send(); +// } +//} + +//public class TransportService +//{ +// public static ITransport Create(string type) +// { +// switch (type) +// { +// case "Air": +// { +// var factory = new AirFactory(); +// return factory.CreateInstance(); +// } +// case "Train": +// { +// var factory = new TrainFactory(); +// return factory.CreateInstance(); +// } + +// case "Truck": +// { +// return new TruckAdapter(); +// } +// default: +// throw new NotImplementedException(); +// } +// } +//} + +//public interface ITransport +//{ +// void Send(); +//} + +//public class Air : ITransport +//{ +// public void Send() +// { +// Console.WriteLine("Send package by air ..."); +// } +//} + +//public class Train : ITransport +//{ +// public void Send() +// { +// Console.WriteLine("Send package by Train ..."); +// } +//} + +//public class TruckAdapter : ITransport +//{ +// private readonly Truck _truck; + +// public TruckAdapter() +// { +// _truck = new Truck(5, "THR"); +// } + +// public void Send() +// { +// // Delegate the call to the Truck class's Deliver method +// // string -> xml nodes +// // +// // ............ +// // +// _truck.Deliver(); +// } +//} + +//public interface ITransportFactory +//{ +// ITransport CreateInstance(); +//} + +//public class AirFactory : ITransportFactory +//{ +// public ITransport CreateInstance() +// { +// //manage instance +// return new Air(); +// } +//} + +//public class TrainFactory : ITransportFactory +//{ +// public ITransport CreateInstance() +// { +// //manage instance +// return new Train(); +// } +//} + +//#endregion +#region 1.9 + +using CryptoCurrencyExternalLibrary; -using ExternalClassLibrary; public class Program { public static void Main() { var type = Console.ReadLine(); - ITransport transport = TransportService.Create(type); - transport.Send(); + Console.WriteLine("Please enter the amount:"); + + string input = Console.ReadLine(); + if (decimal.TryParse(input, out decimal amount)) + { + Console.WriteLine($"The entered amount is: {amount}"); // You can now use the 'amount' variable as needed + + } + else + { + Console.WriteLine("Invalid input, please enter a valid decimal number."); + } + + + IPayment payment = PaymentService.Create(type); + payment.ProcessPayment(amount); + amount = payment.AdjustAmount(amount); } } -public class TransportService +public class PaymentService { - public static ITransport Create(string type) + public static IPayment Create(string type) { switch (type) { - case "Air": + case "CreditCard": { - var factory = new AirFactory(); + var factory = new CreditCardFactory(); return factory.CreateInstance(); } - case "Train": + case "PayPal": { - var factory = new TrainFactory(); + var factory = new PayPalFactory(); return factory.CreateInstance(); } - case "Truck": + case "CryptoCurrency": { - return new TruckAdapter(); + return new CryptoCurrencyAdapter(); } default: - throw new NotImplementedException(); + { + var factory = new NullPaymentFactory(); + return factory.CreateInstance(); + } } } } -public interface ITransport +public interface IPayment { - void Send(); -} + void ProcessPayment(decimal amount); + decimal AdjustAmount(decimal amount); -public class Air : ITransport +} +public class CreditCard : IPayment { - public void Send() + private const decimal FeeRate = 0.02m; + public void ProcessPayment(decimal amount) { - Console.WriteLine("Send package by air ..."); + + } + public decimal AdjustAmount(decimal amount) + { + return amount + (amount * FeeRate); } + } -public class Train : ITransport +public class PayPal : IPayment { - public void Send() + private const decimal DiscountRate = 0.03m; + public void ProcessPayment(decimal amount) { - Console.WriteLine("Send package by Train ..."); + Console.WriteLine(); + } + public decimal AdjustAmount(decimal amount) + { + return amount - (amount * DiscountRate); } } -public class TruckAdapter : ITransport +public class CryptoCurrencyAdapter : IPayment { - private readonly Truck _truck; + private readonly CryptoCurrency _cryptoCurrency; - public TruckAdapter() + public CryptoCurrencyAdapter() { - _truck = new Truck(5,"THR"); + _cryptoCurrency = new CryptoCurrency(); } - public void Send() + public decimal AdjustAmount(decimal amount) { - // Delegate the call to the Truck class's Deliver method - // string -> xml nodes - // - // ............ - // - _truck.Deliver(); + return _cryptoCurrency.ExternalProcessPayment(amount); } + + public void ProcessPayment(decimal amount) + { + throw new NotImplementedException(); + } +} + +public interface IPaymentFactory +{ + IPayment CreateInstance(); } -public interface ITransportFactory +public class CreditCardFactory : IPaymentFactory { - ITransport CreateInstance(); + public IPayment CreateInstance() + { + //manage instance + return new CreditCard(); + } } -public class AirFactory : ITransportFactory +public class PayPalFactory : IPaymentFactory { - public ITransport CreateInstance() + public IPayment CreateInstance() { //manage instance - return new Air(); + return new PayPal(); } } -public class TrainFactory : ITransportFactory +public class NullPayment : IPayment +{ + public decimal AdjustAmount(decimal amount) + { + return amount; + } + + public void ProcessPayment(decimal amount) + { + Console.WriteLine($"Payment method not supported. Unable to process ${amount:F2}."); + } + +} +public class NullPaymentFactory : IPaymentFactory { - public ITransport CreateInstance() + public IPayment CreateInstance() { //manage instance - return new Train(); + return new NullPayment(); } } + #endregion \ No newline at end of file