Last active
January 15, 2026 22:41
-
-
Save sunmeat/912455b265cbcbd62971f5a5c53f1642 to your computer and use it in GitHub Desktop.
facade C# example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| using System.Text; | |
| namespace FacadeExample | |
| { | |
| // клас для прокату лижного спорядження | |
| internal class SkiRent | |
| { | |
| public double RentBoots(int feetSize, int skierLevel) // прокат черевиків | |
| { | |
| // skierLevel: 0-початківець, 1-середній, 2-експерт | |
| double price = 300; // базова ціна за день для дорослих | |
| if (feetSize < 35) price *= 0.7; // знижка для дітей 30% | |
| if (skierLevel == 2) price *= 1.1; // преміум для експертів | |
| return price; | |
| } | |
| public double RentHelmet(int headSize, int skierLevel) // прокат шолома | |
| { | |
| // headSize не впливає на ціну в базовій моделі | |
| return 250; // стандартна ціна за день | |
| } | |
| public double RentSki(int weight, int skierLevel) // прокат лиж | |
| { | |
| // skierLevel: 0-початківець, 1-середній, 2-експерт | |
| double price = 350; // базова ціна за день | |
| if (weight > 100) price *= 1.05; // коригування для ваги | |
| if (skierLevel == 2) price *= 1.2; // преміум лижі для експертів | |
| return price; | |
| } | |
| public double RentSkiPoles(int height) // прокат лижних палиць | |
| { | |
| // height не впливає на ціну в базовій моделі | |
| return 180; // стандартна ціна за день | |
| } | |
| } | |
| // клас для продажу квитків на лижний курорт | |
| internal class SkiResortTicketSystem | |
| { | |
| public double BuyOneDayTicket() | |
| { | |
| return 1400; // ціна одноденного абонемента для дорослих | |
| } | |
| public double BuyTwoDaysTicket() | |
| { | |
| return 2500; // ціна на два дні | |
| } | |
| public double BuyThreeDaysTicket() | |
| { | |
| return 3500; // ціна на три дні | |
| } | |
| public double BuyFourDaysTicket() | |
| { | |
| return 4400; // ціна на чотири дні | |
| } | |
| public double BuyFiveDaysTicket() | |
| { | |
| return 5200; // ціна на п'ять днів | |
| } | |
| public double BuySixDaysTicket() | |
| { | |
| return 5800; // ціна на шість днів | |
| } | |
| public double BuySevenDaysTicket() | |
| { | |
| return 6400; // ціна на сім днів | |
| } | |
| } | |
| // клас для бронювання готельних номерів | |
| internal class HotelBookingSystem | |
| { | |
| public double BookRoom(int roomQuality) | |
| { | |
| // roomQuality: 3-стандарт, 4-комфорт, 5-люкс; ціна за ніч на двох | |
| return roomQuality switch | |
| { | |
| 3 => 6000, | |
| 4 => 10000, | |
| 5 => 45000, | |
| _ => throw new ArgumentException("roomQuality має бути в діапазоні [3;5]") | |
| }; | |
| } | |
| } | |
| // фасад для комплексного планування поїздки | |
| internal class TravelCompany | |
| { | |
| private readonly SkiRent skiRent = new(); | |
| private readonly SkiResortTicketSystem ticketSystem = new(); | |
| private readonly HotelBookingSystem hotelBooking = new(); | |
| public double HaveAVeryVeryNiceTime(int height, int weight, int feetSize, int skierLevel, int roomQuality) | |
| { | |
| // повний пакет: лижі, черевики, палиці, шолом, 7-денний абонемент, готель на 7 ночей | |
| double skiPrice = skiRent.RentSki(weight, skierLevel); | |
| double bootsPrice = skiRent.RentBoots(feetSize, skierLevel); | |
| double polesPrice = skiRent.RentSkiPoles(height); | |
| double helmetPrice = skiRent.RentHelmet(0, skierLevel); // headSize не критичний | |
| double skiPassPrice = ticketSystem.BuySevenDaysTicket(); | |
| double hotelPrice = hotelBooking.BookRoom(roomQuality) * 7; // на тиждень | |
| return skiPrice * 7 + bootsPrice * 7 + polesPrice * 7 + helmetPrice * 7 + skiPassPrice + hotelPrice; | |
| } | |
| public double HaveALittleFunWithYourOwnEquipmentAndTent() | |
| { | |
| // мінімальний варіант: лише одноденний абонемент | |
| return ticketSystem.BuyOneDayTicket(); | |
| } | |
| } | |
| internal static class Program | |
| { | |
| private static void Main() | |
| { | |
| Console.OutputEncoding = Encoding.UTF8; | |
| var travelCompany = new TravelCompany(); | |
| // приклад повної відпустки для лижника-початківця в люксі | |
| double fullVacationPrice = travelCompany.HaveAVeryVeryNiceTime(177, 89, 43, skierLevel:0, roomQuality:5); | |
| Console.WriteLine($"Вартість повної відпустки: {fullVacationPrice:F2} грн"); | |
| // приклад мінімального відпочинку | |
| double minimalPrice = travelCompany.HaveALittleFunWithYourOwnEquipmentAndTent(); | |
| Console.WriteLine($"Вартість мінімального відпочинку: {minimalPrice:F2} грн"); | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment