@@ -14,32 +14,35 @@ namespace RefactoringGuru.DesignPatterns.AbstractFactory.Conceptual
14
14
{
15
15
// EN: The Abstract Factory interface declares a set of methods that return
16
16
// different abstract products. These products are called a family and are
17
- // related by a high-level theme or concept. Products of one family are usually
18
- // able to collaborate among themselves. A family of products may have several
19
- // variants, but the products of one variant are incompatible with products
20
- // of another.
17
+ // related by a high-level theme or concept. Products of one family are
18
+ // usually able to collaborate among themselves. A family of products may
19
+ // have several variants, but the products of one variant are incompatible
20
+ // with products of another.
21
21
//
22
- // RU: Интерфейс Абстрактной Фабрики объявляет набор методов, которые возвращают
23
- // различные абстрактные продукты. Эти продукты называются семейством и связаны
24
- // темой или концепцией высокого уровня. Продукты одного семейства обычно могут
25
- // взаимодействовать между собой. Семейство продуктов может иметь несколько
26
- // вариаций, но продукты одной вариации несовместимы с продуктами другой.
22
+ // RU: Интерфейс Абстрактной Фабрики объявляет набор методов, которые
23
+ // возвращают различные абстрактные продукты. Эти продукты называются
24
+ // семейством и связаны темой или концепцией высокого уровня. Продукты
25
+ // одного семейства обычно могут взаимодействовать между собой. Семейство
26
+ // продуктов может иметь несколько вариаций, но продукты одной вариации
27
+ // несовместимы с продуктами другой.
27
28
public interface IAbstractFactory
28
29
{
29
30
IAbstractProductA CreateProductA ( ) ;
30
31
31
32
IAbstractProductB CreateProductB ( ) ;
32
33
}
33
34
34
- // EN: Concrete Factories produce a family of products that belong to a single
35
- // variant. The factory guarantees that resulting products are compatible.
36
- // Note that signatures of the Concrete Factory's methods return an abstract
37
- // product, while inside the method a concrete product is instantiated.
35
+ // EN: Concrete Factories produce a family of products that belong to a
36
+ // single variant. The factory guarantees that resulting products are
37
+ // compatible. Note that signatures of the Concrete Factory's methods return
38
+ // an abstract product, while inside the method a concrete product is
39
+ // instantiated.
38
40
//
39
- // RU: Конкретная Фабрика производит семейство продуктов одной вариации. Фабрика
40
- // гарантирует совместимость полученных продуктов. Обратите внимание, что
41
- // сигнатуры методов Конкретной Фабрики возвращают абстрактный продукт, в то
42
- // время как внутри метода создается экземпляр конкретного продукта.
41
+ // RU: Конкретная Фабрика производит семейство продуктов одной вариации.
42
+ // Фабрика гарантирует совместимость полученных продуктов. Обратите
43
+ // внимание, что сигнатуры методов Конкретной Фабрики возвращают абстрактный
44
+ // продукт, в то время как внутри метода создается экземпляр конкретного
45
+ // продукта.
43
46
class ConcreteFactory1 : IAbstractFactory
44
47
{
45
48
public IAbstractProductA CreateProductA ( )
@@ -69,8 +72,8 @@ public IAbstractProductB CreateProductB()
69
72
}
70
73
}
71
74
72
- // EN: Each distinct product of a product family should have a base interface.
73
- // All variants of the product must implement this interface.
75
+ // EN: Each distinct product of a product family should have a base
76
+ // interface. All variants of the product must implement this interface.
74
77
//
75
78
// RU: Каждый отдельный продукт семейства продуктов должен иметь базовый
76
79
// интерфейс. Все вариации продукта должны реализовывать этот интерфейс.
@@ -98,13 +101,13 @@ public string UsefulFunctionA()
98
101
}
99
102
}
100
103
101
- // EN: Here's the the base interface of another product. All products can interact with
102
- // each other, but proper interaction is possible only between products of the
103
- // same concrete variant.
104
+ // EN: Here's the the base interface of another product. All products can
105
+ // interact with each other, but proper interaction is possible only between
106
+ // products of the same concrete variant.
104
107
//
105
- // RU: Базовый интерфейс другого продукта. Все продукты могут взаимодействовать
106
- // друг с другом, но правильное взаимодействие возможно только между продуктами
107
- // одной и той же конкретной вариации.
108
+ // RU: Базовый интерфейс другого продукта. Все продукты могут
109
+ // взаимодействовать друг с другом, но правильное взаимодействие возможно
110
+ // только между продуктами одной и той же конкретной вариации.
108
111
public interface IAbstractProductB
109
112
{
110
113
// EN: Product B is able to do its own thing...
@@ -139,8 +142,8 @@ public string UsefulFunctionB()
139
142
// AbstractProductA as an argument.
140
143
//
141
144
// RU: Продукт B1 может корректно работать только с Продуктом A1. Тем не
142
- // менее, он принимает любой экземпляр Абстрактного Продукта А в качестве
143
- // аргумента.
145
+ // менее, он принимает любой экземпляр Абстрактного Продукта А в
146
+ // качестве аргумента.
144
147
public string AnotherUsefulFunctionB ( IAbstractProductA collaborator )
145
148
{
146
149
var result = collaborator . UsefulFunctionA ( ) ;
@@ -171,20 +174,22 @@ public string AnotherUsefulFunctionB(IAbstractProductA collaborator)
171
174
}
172
175
}
173
176
174
- // EN: The client code works with factories and products only through abstract
175
- // types: AbstractFactory and AbstractProduct. This lets you pass any factory or
176
- // product subclass to the client code without breaking it.
177
+ // EN: The client code works with factories and products only through
178
+ // abstract types: AbstractFactory and AbstractProduct. This lets you pass
179
+ // any factory or product subclass to the client code without breaking it.
177
180
//
178
- // RU: Клиентский код работает с фабриками и продуктами только через абстрактные
179
- // типы: Абстрактная Фабрика и Абстрактный Продукт. Это позволяет передавать
180
- // любой подкласс фабрики или продукта клиентскому коду, не нарушая его.
181
+ // RU: Клиентский код работает с фабриками и продуктами только через
182
+ // абстрактные типы: Абстрактная Фабрика и Абстрактный Продукт. Это
183
+ // позволяет передавать любой подкласс фабрики или продукта клиентскому
184
+ // коду, не нарушая его.
181
185
class Client
182
186
{
183
187
public void Main ( )
184
188
{
185
189
// EN: The client code can work with any concrete factory class.
186
190
//
187
- // RU: Клиентский код может работать с любым конкретным классом фабрики.
191
+ // RU: Клиентский код может работать с любым конкретным классом
192
+ // фабрики.
188
193
Console . WriteLine ( "Client: Testing client code with the first factory type..." ) ;
189
194
ClientMethod ( new ConcreteFactory1 ( ) ) ;
190
195
Console . WriteLine ( ) ;
0 commit comments