Open sidebar
Model: Default
设计模式有多少种
设计模式是在软件设计中反复出现的一些最佳实践和解决方案的集合。根据 Gang of Four(GoF)的经典著作《设计模式:可复用面向对象软件的基础》一书,设计模式可分为以下三类:
目前已经有超过 20 种设计模式被正式定义和广泛应用,但是这个数字随着时间的推移也在不断增加。
c++实现这些模式
C++是一种强大的面向对象编程语言,可以很方便地实现各种设计模式。以下是一些常见设计模式的C++实现示例:
c++Copy codeclass Singleton {
public:
static Singleton& getInstance() {
static Singleton instance;
return instance;
}
private:
Singleton() {} // 私有化构造函数
Singleton(const Singleton&) = delete; // 禁止拷贝构造
Singleton& operator=(const Singleton&) = delete; // 禁止赋值操作
};
c++Copy codeclass Product {
public:
virtual void use() = 0;
};
class ConcreteProduct : public Product {
public:
void use() override {
// 具体产品的实现
}
};
class Creator {
public:
virtual Product* createProduct() = 0;
};
class ConcreteCreator : public Creator {
public:
Product* createProduct() override {
return new ConcreteProduct();
}
};
c++Copy codeclass Observer {
public:
virtual void update() = 0;
};
class Subject {
public:
void attach(Observer* observer) {
observers_.push_back(observer);
}
void detach(Observer* observer) {
observers_.remove(observer);
}
void notify() {
for (auto observer : observers_) {
observer->update();
}
}
private:
std::list<Observer*> observers_;
};
class ConcreteObserver : public Observer {
public:
void update() override {
// 具体观察者的更新操作
}
};
以上是一些常见设计模式的C++实现示例,实际上每种模式的具体实现都会因为业务场景而略有不同,所以这里的示例仅供参考。
工厂模式的主要作用是什么
工厂模式是一种创建型设计模式,其主要作用是将对象的创建与使用分离开来,以提高系统的可维护性、灵活性和可扩展性。工厂模式通过将对象的创建委托给工厂类来实现,从而降低了客户端与具体产品的耦合度。
工厂模式的主要作用包括:
总之,工厂模式是一种非常重要的设计模式,在实际的软件开发中经常被使用,其主要作用是将对象的创建与使用分离开来,以提高系统的可维护性、灵活性和可扩展性。
给出实例
以下是一个简单的示例,用于说明工厂模式的应用。
假设有一个应用程序,需要根据用户的需求创建不同类型的图表,例如柱状图、折线图、饼状图等。在不使用工厂模式的情况下,我们需要在客户端代码中直接创建图表对象,如下所示:
c++Copy codevoid client() {
std::string type = getUserInput(); // 获取用户输入的图表类型
Chart* chart = nullptr;
if (type == "bar") {
chart = new BarChart(); // 创建柱状图对象
} else if (type == "line") {
chart = new LineChart(); // 创建折线图对象
} else if (type == "pie") {
chart = new PieChart(); // 创建饼状图对象
}
chart->display(); // 显示图表
}
这种实现方式存在以下问题:
使用工厂模式可以解决这些问题。我们可以定义一个工厂类,负责创建不同类型的图表对象,客户端代码只需要通过工厂类来获取图表对象,而不需要直接与具体产品耦合,如下所示:
c++Copy codeclass ChartFactory {
public:
virtual Chart* createChart() = 0;
};
class BarChartFactory : public ChartFactory {
public:
Chart* createChart() override {
return new BarChart();
}
};
class LineChartFactory : public ChartFactory {
public:
Chart* createChart() override {
return new LineChart();
}
};
class PieChartFactory : public ChartFactory {
public:
Chart* createChart() override {
return new PieChart();
}
};
void client() {
std::string type = getUserInput(); // 获取用户输入的图表类型
ChartFactory* factory = nullptr;
if (type == "bar") {
factory = new BarChartFactory(); // 创建柱状图工厂对象
} else if (type == "line") {
factory = new LineChartFactory(); // 创建折线图工厂对象
} else if (type == "pie") {
factory = new PieChartFactory(); // 创建饼状图工厂对象
}
Chart* chart = factory->createChart(); // 通过工厂对象获取图表对象
chart->display(); // 显示图表
delete factory; // 释放工厂对象
delete chart; // 释放图表对象
}
这种实现方式的优点在于:
New chat
powered by kaifamiao