23种设计模式及C++代码
时间: 2023-02-26 11:14:47 浏览: 76
23 design patterns in C code:
1. Singleton Pattern
```
#include<iostream>
#include<string>
class Singleton
{
private:
static Singleton* instance;
std::string value;
// Private constructor so that no objects can be created.
Singleton()
{
value = "Singleton Pattern";
}
public:
static Singleton* getInstance()
{
if (!instance)
instance = new Singleton;
return instance;
}
std::string getValue()
{
return value;
}
};
// Static member
Singleton* Singleton::instance = 0;
int main()
{
Singleton *singleton = Singleton::getInstance();
std::cout << singleton->getValue() << std::endl;
return 0;
}
```
2. Factory Pattern
```
#include <iostream>
#include <string>
class Product
{
public:
virtual std::string getName() = 0;
};
class ConcreteProductA : public Product
{
public:
std::string getName()
{
return "ConcreteProductA";
}
};
class ConcreteProductB : public Product
{
public:
std::string getName()
{
return "ConcreteProductB";
}
};
class Factory
{
public:
virtual Product* createProduct() = 0;
};
class ConcreteFactoryA : public Factory
{
public:
Product* createProduct()
{
return new ConcreteProductA();
}
};
class ConcreteFactoryB : public Factory
{
public:
Product* createProduct()
{
return new ConcreteProductB();
}
};
int main()
{
Factory *factoryA = new ConcreteFactoryA();
Product *productA = factoryA->createProduct();
std::cout << productA->getName() << std::endl;
Factory *factoryB = new ConcreteFactoryB();
Product *productB = factoryB->createProduct();
std::cout << productB->getName() << std::endl;
return 0;
}
```
3. Abstract Factory Pattern
```
#include <iostream>
#include <string>
class ProductA
{
public:
virtual std::string getName() = 0;
};
class ConcreteProductA1 : public ProductA
{
public:
std::string getName()
{
return "ConcreteProductA1";
}
};
class ConcreteProductA2 : public ProductA
{
public:
std::string getName()
{
return "ConcreteProductA2";
}
};
class ProductB
{
public:
virtual std::string getName() = 0;
};
class ConcreteProductB1 : public ProductB
{
public:
std::string getName()
{
return "ConcreteProductB1";
}
};
class Concrete