97 lines
2.4 KiB
C#
97 lines
2.4 KiB
C#
|
/* Приспособленец
|
|||
|
Благодаря совместному использованию,
|
|||
|
поддерживает эффективную работу
|
|||
|
с большим количеством объектов.
|
|||
|
(для оптимизации работы с памятью)
|
|||
|
*/
|
|||
|
class Program
|
|||
|
{
|
|||
|
static void Main()
|
|||
|
{
|
|||
|
#region Пример №1 - базовое
|
|||
|
double longtitude = 22.33;
|
|||
|
double latitude = 55.11;
|
|||
|
|
|||
|
HouseFactory houseFactory = new HouseFactory();
|
|||
|
for (int i = 0; i < 10; i++)
|
|||
|
{
|
|||
|
House panelH = houseFactory.GetHouse("Panel");
|
|||
|
if(panelH != null)
|
|||
|
panelH.Build(longtitude, latitude);
|
|||
|
longtitude += 0.1;
|
|||
|
latitude += 0.1;
|
|||
|
}
|
|||
|
|
|||
|
for (int i = 0; i < 10; i++)
|
|||
|
{
|
|||
|
House officeH = houseFactory.GetHouse("Office");
|
|||
|
if (officeH != null)
|
|||
|
officeH.Build(longtitude, latitude);
|
|||
|
longtitude += 0.1;
|
|||
|
latitude += 0.1;
|
|||
|
}
|
|||
|
|
|||
|
Console.ReadKey();
|
|||
|
#endregion
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
abstract class House
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// Кол-во этажей - внутреннее состояние
|
|||
|
/// </summary>
|
|||
|
protected int stages;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Внешнее состояние действия
|
|||
|
/// </summary>
|
|||
|
/// <param name="latitude"></param>
|
|||
|
/// <param name="longitude"></param>
|
|||
|
public abstract void Build(double latitude, double longitude);
|
|||
|
}
|
|||
|
|
|||
|
class PanelHouse : House
|
|||
|
{
|
|||
|
public PanelHouse()
|
|||
|
{
|
|||
|
stages = 5;
|
|||
|
}
|
|||
|
|
|||
|
public override void Build(double latitude, double longitude)
|
|||
|
{
|
|||
|
Console.WriteLine($"PanelHouse Build stages-{stages} {latitude}, {longitude}");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
class OfficeHouse : House
|
|||
|
{
|
|||
|
public OfficeHouse()
|
|||
|
{
|
|||
|
stages = 50;
|
|||
|
}
|
|||
|
|
|||
|
public override void Build(double latitude, double longitude)
|
|||
|
{
|
|||
|
Console.WriteLine($"OfficeHouse Build stages-{stages} {latitude}, {longitude}");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
class HouseFactory
|
|||
|
{
|
|||
|
Dictionary<string, House> houses = new Dictionary<string, House>();
|
|||
|
|
|||
|
public HouseFactory()
|
|||
|
{
|
|||
|
houses.Add("Panel", new PanelHouse());
|
|||
|
houses.Add("Office", new OfficeHouse());
|
|||
|
}
|
|||
|
|
|||
|
public House GetHouse(string key)
|
|||
|
{
|
|||
|
if (houses.ContainsKey(key))
|
|||
|
return houses[key];
|
|||
|
else
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|