设计模式--装饰器模式

2023-06-25 20:16:17 浏览数 (1)

装饰器模式是一种结构型设计模式,它允许你动态地将行为附加到对象上,而不需要使用子类。装饰器模式可以将一个对象嵌套在另一个对象中,形成一条对象链,从而允许你使用不同的对象来替换默认的行为。

下面是一个使用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...”的文本,从而成功地为普通汽车添加了运动套件的行为。

【小结】

所谓的设计模式,就是我们在写代码时的一种思路。

0 人点赞