mirror of
https://github.com/JakubVojvoda/design-patterns-cpp.git
synced 2025-12-17 21:04:36 +03:00
add Abstract Factory
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
* Author: Jakub Vojvoda [github.com/JakubVojvoda]
|
||||
* 2016
|
||||
*
|
||||
* Source code is licenced under MIT licence
|
||||
* Source code is licensed under MIT licence
|
||||
* (for more details see LICENCE)
|
||||
*
|
||||
*/
|
||||
@@ -28,14 +28,14 @@ public:
|
||||
class ConcreteProductAX : public ProductA {
|
||||
public:
|
||||
std::string getName() {
|
||||
return "A - X";
|
||||
return "A-X";
|
||||
}
|
||||
// ...
|
||||
};
|
||||
|
||||
class ConcreteProductAY : public ProductA {
|
||||
std::string getName() {
|
||||
return "A - Y";
|
||||
return "A-Y";
|
||||
}
|
||||
// ...
|
||||
};
|
||||
@@ -57,14 +57,14 @@ public:
|
||||
*/
|
||||
class ConcreteProductBX : public ProductB {
|
||||
std::string getName() {
|
||||
return "B - X";
|
||||
return "B-X";
|
||||
}
|
||||
// ...
|
||||
};
|
||||
|
||||
class ConcreteProductBY : public ProductB {
|
||||
std::string getName() {
|
||||
return "B - Y";
|
||||
return "B-Y";
|
||||
}
|
||||
// ...
|
||||
};
|
||||
@@ -117,5 +117,6 @@ int main()
|
||||
|
||||
ProductA *p2 = factoryY->createProductA();
|
||||
std::cout << "Product: " << p2->getName() << std::endl;
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,16 @@
|
||||
## Abstract Factory
|
||||
|
||||
Abstract factory pattern has creational purpose and provides an interface for creating families of related or dependent objects without specifying their concrete classes.
|
||||
Pattern applies to classes where deals with relationships through inheritence ie. they are static-fixed at compile time.
|
||||
Abstract factory pattern has creational purpose and provides an interface for
|
||||
creating families of related or dependent objects without specifying their
|
||||
concrete classes. Pattern applies to object and deal with object relationships,
|
||||
which are more dynamic. In contrast to Factory Method, Abstract Factory pattern
|
||||
produces family of types that are related, ie. it has more than one method of
|
||||
types it produces.
|
||||
|
||||
|
||||
### When to use
|
||||
|
||||
* a system should be independent of how its products are created, composed, and represented
|
||||
* a system should be configured with one of multiple families of products
|
||||
* a family of related product objects is designed to be used together
|
||||
* you want to provide a class library of products, and you want to reveal just their interfaces, not their implementations
|
||||
Reference in New Issue
Block a user