FactoryPattern.cpp 945 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #include <iostream>
  2. // Product
  3. class Product {
  4. public:
  5. virtual ~Product() { }
  6. virtual void say() = 0;
  7. };
  8. class ConcreteProduct :public Product {
  9. public:
  10. ConcreteProduct() {
  11. std::cout << "ConcreteProduct..." << std::endl;
  12. }
  13. void say() {
  14. std::cout << "ConcreteProduct Say..." << std::endl;
  15. }
  16. ~ConcreteProduct() { }
  17. };
  18. // Factory
  19. class Factory {
  20. public:
  21. virtual Product* CreateProduct() = 0;
  22. virtual ~Factory() { }
  23. protected:
  24. Factory() { }
  25. };
  26. class ConcreteFactory :public Factory {
  27. public:
  28. ConcreteFactory() {
  29. std::cout << "ConcreteFactory..." << std::endl;
  30. }
  31. ~ConcreteFactory() {
  32. }
  33. Product* CreateProduct() {
  34. return new ConcreteProduct();
  35. }
  36. };
  37. // Test
  38. int main() {
  39. Factory *factory = new ConcreteFactory();
  40. Product *product = factory->CreateProduct();
  41. product->say();
  42. delete factory;
  43. delete product;
  44. return 0;
  45. }