C#中设计模式的应用与经典案例详解
发布时间: 2024-05-01 21:28:10 阅读量: 77 订阅数: 51
![设计模式](https://img-blog.csdnimg.cn/b426113971b644f99d71d894252fa321.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5a6B6Z2Z6Ie06L-cMjAyMQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
# 1.1 C# 设计模式概述
设计模式是软件工程中常用的可复用解决方案,用于解决常见软件设计问题。它们提供了一种标准化和可维护的方式来组织和编写代码,从而提高软件的质量和可扩展性。
C# 中提供了丰富的内置设计模式,包括创建型、结构型和行为型模式。这些模式可以帮助开发人员解决各种常见的编程问题,例如对象创建、结构组织和行为实现。通过使用设计模式,开发人员可以创建更灵活、更可维护和更可重用的代码。
# 2. 创建型设计模式
创建型设计模式主要用于创建对象,它们提供了创建对象的不同方式,从而提高了代码的灵活性、可扩展性和可维护性。
### 2.1 工厂模式
工厂模式是一种创建对象的方式,它将创建对象的逻辑与使用对象的逻辑分离。工厂模式有三种主要类型:
#### 2.1.1 简单工厂模式
简单工厂模式是工厂模式最简单的一种,它通过一个工厂类来创建对象。工厂类负责根据传入的参数决定创建哪种类型的对象,并返回该对象。
```csharp
public class ShapeFactory
{
public Shape CreateShape(string shapeType)
{
switch (shapeType)
{
case "circle":
return new Circle();
case "rectangle":
return new Rectangle();
default:
throw new ArgumentException("Invalid shape type");
}
}
}
```
**逻辑分析:**
* `ShapeFactory` 类是一个工厂类,它负责创建形状对象。
* `CreateShape` 方法接收一个字符串参数,该参数指定要创建的形状类型。
* 根据传入的参数,工厂类决定创建哪种类型的对象,并返回该对象。
#### 2.1.2 工厂方法模式
工厂方法模式是一种更灵活的工厂模式,它将创建对象的逻辑委托给不同的工厂子类。每个工厂子类负责创建特定类型的对象。
```csharp
public abstract class ShapeFactory
{
public abstract Shape CreateShape();
}
public class CircleFactory : ShapeFactory
{
public override Shape CreateShape()
{
return new Circle();
}
}
public class RectangleFactory : ShapeFactory
{
public override Shape CreateShape()
{
return new Rectangle();
}
}
```
**逻辑分析:**
* `ShapeFactory` 类是一个抽象工厂类,它定义了创建形状对象的接口。
* `CircleFactory` 和 `RectangleFactory` 是工厂子类,它们分别负责创建圆形和矩形对象。
* 客户端代码可以通过不同的工厂子类创建不同的形状对象。
#### 2.1.3 抽象工厂模式
抽象工厂模式是一种更高级的工厂模式,它创建了一组相关的对象,而不是单个对象。抽象工厂模式将创建不同类型对象族的逻辑委托给不同的工厂子类。
```csharp
public interface IShapeFactory
{
IShape CreateShape();
IColor CreateColor();
}
public class CircleFactory : IShapeFactory
{
public IShape CreateShape()
{
return new Circle();
}
public IColor CreateColor()
{
return new RedColor();
}
}
public class RectangleFactory : IShapeFactory
{
public IShape CreateShape()
{
return new Rectangle();
}
public IColor CreateColor()
{
return new BlueColor();
}
}
```
**逻辑分析:**
* `IShapeFactory` 接口定义了创建形状和颜色的接口。
* `CircleFactory` 和 `RectangleFactory` 是工厂子类,它们分别负责创建圆形和矩形对象以及红色和蓝色颜色对象。
* 客户端代码可以通过不同的工厂子类创建不同类型对象族。
# 3.1 适配器模式
适配器模式是一种结构型设计模式,用于将一个类的接口转换成另一个客户端期望的接口。它使原本由于接口不兼容而无法在一起工作的类可以协同工作。
#### 3.1.1 类适配器模式
类适配器模式通过创建一个适配器类来实现,该适配器类继承自目标类,并实现客户端期望的接口。适配器类将客户端的请求委托给目标类,从而适配两种接口之间的差异。
**代码示例:**
```csharp
// 目标类
public class Target
{
public virtual void Request()
{
Console.WriteLine("Target: Request");
}
}
// 客户端期望的接口
public interface IAdapter
{
void SpecificRequest();
}
// 适配器类(继承自目标类)
public class Adapter : Target, IAdapter
{
public override void Request()
{
Console.WriteLine("Adapter: SpecificRequest");
}
}
// 客户端代码
public class Client
{
public void Main()
{
IAdapter adapter = new Adapter();
adapter.SpecificRequest();
}
}
```
**逻辑分析:**
* `Target` 类是目标类,实现了 `Request` 方法。
* `IAdapter` 接口是客户端期望的接口,定义了 `SpecificRequest` 方法。
* `Adapter` 类继承自 `Target` 类,同时实现了 `IAdapter` 接口。
* `Adapter` 类中的 `Request` 方法被重写,调用 `SpecificRequest` 方
0
0