Skip to content

Commit aef0ab1

Browse files
feat: add factory method realization
1 parent 247a16f commit aef0ab1

File tree

9 files changed

+180
-2
lines changed

9 files changed

+180
-2
lines changed

Patterns/Creational/FactoryMethod/FactoryMethodDemo/Program.cs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,29 @@ private static void Main(string[] args)
1717
/// </summary>
1818
private static void RunDemo()
1919
{
20-
20+
var nokiaPrice = 10000;
21+
var nokiaModel = "3310";
22+
var nokiaProcessor = "RAP3G";
23+
var nokiaRandomAccessMemory = 1;
24+
25+
var samsungPrice = 100000;
26+
var samsungModel = "S23";
27+
var samsungProcessor = "Snap Dragon";
28+
var samsungRandomAccessMemory = 8;
29+
30+
var nokia = new NokiaDeveloper().CreatePhone();
31+
nokia.Price = nokiaPrice;
32+
nokia.Model = nokiaModel;
33+
nokia.Processor = nokiaProcessor;
34+
nokia.RandomAccessMemory = nokiaRandomAccessMemory;
35+
36+
var samsung = new SamsungDeveloper().CreatePhone();
37+
samsung.Price = samsungPrice;
38+
samsung.Model = samsungModel;
39+
samsung.Processor = samsungProcessor;
40+
samsung.RandomAccessMemory = samsungRandomAccessMemory;
41+
42+
Console.WriteLine($"Созданные телефоны:{Environment.NewLine}{nokia}{Environment.NewLine}{samsung}");
2143
}
2244
#endregion
2345
}

Patterns/Creational/FactoryMethod/FactoryMethodLib/FactoryMethodLib.csproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,13 @@
4141
<Reference Include="System.Xml" />
4242
</ItemGroup>
4343
<ItemGroup>
44+
<Compile Include="NokiaDeveloper.cs" />
45+
<Compile Include="Samsung.cs" />
46+
<Compile Include="IPhoneDeveloper.cs" />
47+
<Compile Include="Nokia.cs" />
48+
<Compile Include="Phone.cs" />
4449
<Compile Include="Properties\AssemblyInfo.cs" />
50+
<Compile Include="SamsungDeveloper.cs" />
4551
</ItemGroup>
4652
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
4753
</Project>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+

2+
namespace Patterns
3+
{
4+
/// <summary>
5+
/// Содержит методы для рабработчика телефонов.
6+
/// </summary>
7+
public interface IPhoneDeveloper
8+
{
9+
/// <summary>
10+
/// Создание телефона.
11+
/// </summary>
12+
/// <returns>Телефон.</returns>
13+
Phone CreatePhone();
14+
}
15+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+

2+
namespace Patterns
3+
{
4+
/// <summary>
5+
/// Нокиа.
6+
/// </summary>
7+
public class Nokia : Phone
8+
{
9+
#region Свойства.
10+
/// <summary>
11+
/// Работает ли батарея.
12+
/// </summary>
13+
public bool IsBatteryWork { get; set; }
14+
#endregion
15+
16+
#region Методы.
17+
/// <summary>
18+
/// Строковое представления объекта Нокиа.
19+
/// </summary>
20+
/// <returns>Данные Нокиа в виде строки.</returns>
21+
public override string ToString() => $"Нокиа: {base.ToString()} Работает ли батарея = {IsBatteryWork}";
22+
#endregion
23+
}
24+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+

2+
namespace Patterns
3+
{
4+
/// <summary>
5+
/// Разработчик телефонов фирмы Нокиа.
6+
/// </summary>
7+
public class NokiaDeveloper : IPhoneDeveloper
8+
{
9+
#region Методы.
10+
/// <summary>
11+
/// Создание телефона.
12+
/// </summary>
13+
/// <returns>Телефон.</returns>
14+
public Phone CreatePhone() => new Nokia();
15+
#endregion
16+
}
17+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+

2+
namespace Patterns
3+
{
4+
/// <summary>
5+
/// Телефон.
6+
/// </summary>
7+
public abstract class Phone
8+
{
9+
#region Свойства.
10+
/// <summary>
11+
/// Цена.
12+
/// </summary>
13+
public decimal Price { get; set; }
14+
15+
/// <summary>
16+
/// Модель.
17+
/// </summary>
18+
public string Model { get; set; } = string.Empty;
19+
20+
/// <summary>
21+
/// Процессор.
22+
/// </summary>
23+
public string Processor { get; set; } = string.Empty;
24+
25+
/// <summary>
26+
/// Оперативная память.
27+
/// </summary>
28+
public int RandomAccessMemory { get; set; }
29+
#endregion
30+
31+
#region Методы.
32+
/// <summary>
33+
/// Строковое представления объекта телефона.
34+
/// </summary>
35+
/// <returns>Данные телефона в виде строки.</returns>
36+
public override string ToString() => $"Цена = {Price} Модель = {Model} Процессор = {Processor} Оперативная память = {RandomAccessMemory}";
37+
#endregion
38+
}
39+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+

2+
namespace Patterns
3+
{
4+
/// <summary>
5+
/// Самсунг.
6+
/// </summary>
7+
public class Samsung : Phone
8+
{
9+
#region Свойства.
10+
/// <summary>
11+
/// Влючена ли сейчас фронтальная камера.
12+
/// </summary>
13+
public bool IsFrontCamera { get; set; }
14+
#endregion
15+
16+
#region Методы.
17+
/// <summary>
18+
/// Строковое представления объекта Самсунга.
19+
/// </summary>
20+
/// <returns>Данные Самсунга в виде строки.</returns>
21+
public override string ToString() => $"Самсунг: {base.ToString()} Включена ли фронтальная камера = {IsFrontCamera}";
22+
#endregion
23+
}
24+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
namespace Patterns
2+
{
3+
/// <summary>
4+
/// Разработчик телефонов фирмы Самсунг.
5+
/// </summary>
6+
public class SamsungDeveloper
7+
{
8+
#region Методы.
9+
/// <summary>
10+
/// Создание телефона.
11+
/// </summary>
12+
/// <returns>Телефон.</returns>
13+
public Phone CreatePhone() => new Samsung();
14+
#endregion
15+
}
16+
}

Patterns/Creational/FactoryMethod/FactoryMethodTests/FactoryMethodTests.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,24 @@ namespace Patterns
66
[TestClass]
77
public class FactoryMethodTests
88
{
9+
#region Методы.
10+
/// <summary>
11+
/// Проверка корректности создания телефона фирмы Самсунг с помощью разработчика.
12+
/// </summary>
913
[TestMethod]
10-
public void TestMethod1()
14+
public void CreateSamsung_BySamsungDeveloper_ShouldReturnSamsung()
1115
{
16+
Assert.IsTrue(new SamsungDeveloper().CreatePhone() is Samsung);
1217
}
18+
19+
/// <summary>
20+
/// Проверка корректности создания телефона фирмы Нокиа с помощью разработчика.
21+
/// </summary>
22+
[TestMethod]
23+
public void CreateNokia_ByNokiaDeveloper_ShouldReturnNokia()
24+
{
25+
Assert.IsTrue(new NokiaDeveloper().CreatePhone() is Nokia);
26+
}
27+
#endregion
1328
}
1429
}

0 commit comments

Comments
 (0)