手写设计模式C++
时间: 2025-04-14 17:06:24 浏览: 25
<think>好的,用户想了解或实现C++中的设计模式,特别是手写实现常见的示例代码。首先,我需要整理用户提供的引用内容,看看有哪些设计模式已经被提及。引用中提到了单例模式、策略模式、原型模式和工厂模式相关的代码或概念。用户可能需要这些模式的示例,以及可能相关的其他常见模式。
首先,我需要确定用户可能需要的常见设计模式。除了提到的单例、策略、原型,还有工厂、观察者、装饰者、适配器等。根据引用中的代码示例,先提供已有的模式,再补充其他常见模式的实现。
接下来,检查每个引用内容。引用1是单例模式的代码示例,引用2是策略模式,引用3提到原型模式,引用4中的代码似乎是一个简单的计算类,可能用于说明工厂模式或其他模式。不过用户需要的是手写实现,所以需要根据这些引用内容来构建示例。
首先,单例模式已经在引用1中有示例,可以详细说明。策略模式在引用2中提到,需要给出具体的代码示例。原型模式在引用3中提到,需要解释并给出C++的实现。此外,可能还需要补充工厂模式、观察者模式等。
然后,需要确保代码符合C++标准,并且正确使用语法。例如,单例模式的实现中,构造函数私有化,删除拷贝构造函数和赋值运算符,使用静态局部变量确保线程安全等。
在编写每个设计模式的示例时,要简洁明了,突出模式的核心思想。例如,策略模式通过将算法封装成类,使得可以动态切换;工厂模式通过工厂类创建对象,解耦对象的创建和使用。
同时,需要注意用户提到的“手写实现”,所以代码应该简单易懂,避免过于复杂的模板或高级特性,除非必要。例如,原型模式中可能需要实现克隆方法,使用虚函数来实现深拷贝。
最后,生成相关问题,帮助用户进一步学习。问题可以涉及各个模式的应用场景、优缺点、实现细节等。
总结步骤:
1. 列举常见设计模式,选择几个有引用支持的(单例、策略、原型)并补充其他常见模式。
2. 为每个模式编写简洁的C++代码示例,确保语法正确。
3. 解释每个模式的结构和用途。
4. 生成相关问题,促进用户深入思考。</think>以下是为您整理的C++常见设计模式实现示例,包含代码解析和模式特点说明:
### 1. 单例模式(Singleton)
保证类仅有一个实例
```cpp
class Logger {
public:
static Logger& getInstance() {
static Logger instance; // C++11保证线程安全
return instance;
}
void log(const string& msg) {
cout << "[LOG] " << msg << endl;
}
private:
Logger() = default; // 私有构造函数
Logger(const Logger&) = delete; // 禁止拷贝
Logger& operator=(const Logger&) = delete; // 禁止赋值
};
```
### 2. 策略模式(Strategy)
动态切换算法策略
```cpp
class PaymentStrategy {
public:
virtual void pay(double amount) = 0;
};
class Alipay : public PaymentStrategy {
public:
void pay(double amount) override {
cout << "支付宝支付:" << amount << "元" << endl;
}
};
class WechatPay : public PaymentStrategy {
public:
void pay(double amount) override {
cout << "微信支付:" << amount << "元" << endl;
}
};
class PaymentContext {
private:
PaymentStrategy* strategy;
public:
void setStrategy(PaymentStrategy* s) { strategy = s; }
void executePayment(double amount) { strategy->pay(amount); }
};
```
### 3. 工厂模式(Factory)
封装对象创建过程
```cpp
class Shape {
public:
virtual void draw() = 0;
};
class Circle : public Shape {
public:
void draw() override { cout << "绘制圆形" << endl; }
};
class ShapeFactory {
public:
static Shape* createShape(const string& type) {
if(type == "circle") return new Circle();
// 扩展其他形状...
return nullptr;
}
};
```
### 4. 观察者模式(Observer)
实现事件通知机制
```cpp
class Observer {
public:
virtual void update(const string& message) = 0;
};
class Subject {
private:
vector<Observer*> observers;
public:
void attach(Observer* o) { observers.push_back(o); }
void notify(const string& msg) {
for(auto o : observers) o->update(msg);
}
};
class User : public Observer {
public:
void update(const string& msg) override {
cout << "收到通知:" << msg << endl;
}
};
```
### 5. 原型模式(Prototype)
通过克隆创建对象
```cpp
class Prototype {
public:
virtual Prototype* clone() = 0;
virtual ~Prototype() = default;
};
class ConcretePrototype : public Prototype {
private:
int data;
public:
ConcretePrototype(int d) : data(d) {}
Prototype* clone() override {
return new ConcretePrototype(*this);
}
};
```
阅读全文
相关推荐


















