Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Last active January 15, 2026 22:41
Show Gist options
  • Select an option

  • Save sunmeat/912455b265cbcbd62971f5a5c53f1642 to your computer and use it in GitHub Desktop.

Select an option

Save sunmeat/912455b265cbcbd62971f5a5c53f1642 to your computer and use it in GitHub Desktop.
facade C# example
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