软件设计模式:设计原则、模式分类与实战应用,提升代码质量
发布时间: 2024-08-12 03:58:39 阅读量: 37 订阅数: 50
设计原则与模式,java23种设计模式项目实战pdf文档视频资源.rar
![opencv情绪识别](https://www.ptc.com/-/media/Images/blog/post/cad-blog/2020/september/gd-featured.png)
# 1. 软件设计原则**
软件设计原则是一组指导软件设计的指导方针,旨在提高代码质量、可维护性和可扩展性。这些原则有助于创建灵活、可重用和易于理解的代码。
**1.1 单一职责原则**
单一职责原则规定,每个类或模块只应负责一个特定的任务。这有助于降低耦合度,提高可维护性,因为更改一个模块不会影响其他模块。
**1.2 开闭原则**
开闭原则指出,软件应该对扩展开放,对修改关闭。这意味着新功能可以通过扩展现有代码来添加,而无需修改现有代码。这提高了代码的可扩展性和可维护性。
# 2. 设计模式分类
设计模式是一种经过验证的解决方案,用于解决软件设计中常见的问题。它们提供了一种系统化的方法来组织和结构代码,从而提高其可维护性、可扩展性和可读性。设计模式通常被分为三大类:创建型、结构型和行为型。
### 2.1 创建型模式
创建型模式关注于创建对象的机制。它们提供了一种灵活的方式来创建对象,而无需指定其具体类。
#### 2.1.1 单例模式
单例模式确保一个类只有一个实例,并提供一个全局访问点。它用于创建全局对象或限制对资源的访问。
**代码块:**
```java
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
```
**逻辑分析:**
* 私有构造函数防止直接创建实例。
* `getInstance()` 方法检查实例是否存在,如果不存在则创建它。
* 每次调用 `getInstance()` 都返回相同的实例,确保单例性。
#### 2.1.2 工厂方法模式
工厂方法模式定义了一个创建对象的接口,但将实际创建过程延迟到子类。它允许在不指定具体类的情况下创建对象。
**代码块:**
```python
class ShapeFactory:
def create_shape(self, shape_type):
if shape_type == "circle":
return Circle()
elif shape_type == "rectangle":
return Rectangle()
else:
raise ValueError("Invalid shape type")
class Circle:
def draw(self):
print("Drawing a circle")
class Rectangle:
def draw(self):
print("Drawing a rectangle")
factory = ShapeFactory()
circle = factory.create_shape("circle")
circle.draw()
```
**逻辑分析:**
* `ShapeFactory` 定义了创建形状对象的接口。
* 子类(`Circle` 和 `Rectangle`)实现具体的创建方法。
* 客户端通过工厂对象创建形状,而无需知道具体类。
#### 2.1.3 抽象工厂模式
抽象工厂模式提供了一个接口,用于创建一系列相关的对象,而无需指定它们的具体类。它用于创建对象家族,这些对象在接口上相关但实现不同。
**代码块:**
```cpp
class ShapeFactory {
public:
virtual Shape* create_circle() = 0;
virtual Shape* create_rectangle() = 0;
};
class Circle : public Shape {
public:
void draw() override {
std::cout << "Drawing a circle" << std::endl;
}
};
class Rectangle : public Shape {
public:
void draw() override {
std::cout << "Drawing a rectangle" << std::endl;
}
};
class ShapeFactory1 : public ShapeFactory {
public:
Shape* create_circl
```
0
0