装饰器模式是一种结构型设计模式,它允许你动态地将行为附加到对象上,而不需要使用子类。装饰器模式可以将一个对象嵌套在另一个对象中,形成一条对象链,从而允许你使用不同的对象来替换默认的行为。
下面是一个使用C#编写的装饰器模式代码实例:
代码语言:javascript复制// 定义一个接口
public interface ICar
{
void Drive();
}
// 实现接口的类
public class NormalCar : ICar
{
public void Drive()
{
Console.WriteLine("Driving a normal car...");
}
}
// 装饰器基类
public abstract class CarDecorator : ICar
{
private ICar _car;
public CarDecorator(ICar car)
{
_car = car;
}
public virtual void Drive()
{
_car.Drive();
}
}
// 具体装饰器类
public class SportsCar : CarDecorator
{
public SportsCar(ICar car) : base(car)
{
}
public override void Drive()
{
base.Drive();
Console.WriteLine("Driving a sports car...");
}
}
// 使用示例
var car = new NormalCar();
car.Drive(); // output: "Driving a normal car..."
var sportsCar = new SportsCar(car);
sportsCar.Drive(); // output: "Driving a normal car...Driving a sports car..."
在上面的示例中,我们使用装饰器模式来为普通汽车添加了一个运动套件。我们首先定义了一个`ICar`接口以及一个`NormalCar`类,实现了这个接口。然后,我们创建了一个名为`CarDecorator`的抽象类,它实现了`ICar`接口,并保存了一个`ICar`对象,这表明了我们可以使用装饰器模式将一个对象嵌套在另一个对象中。
接下来,我们创建了一个名为`SportsCar`的具体装饰器类,它继承了`CarDecorator`类,并通过重写`Drive`方法来附加了运动套件的行为。最后,我们实例化了一个`NormalCar`对象,并使用`SportsCar`类实例化一个新的对象。我们可以发现,在调用`sportsCar.Drive()`方法时,它首先调用了基类实现的`Drive`方法,然后打印了“Driving a sports car...”的文本,从而成功地为普通汽车添加了运动套件的行为。
【小结】
所谓的设计模式,就是我们在写代码时的一种思路。