前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式--装饰器模式

设计模式--装饰器模式

原创
作者头像
软件架构师Michael
发布2023-06-25 20:16:17
2030
发布2023-06-25 20:16:17
举报
文章被收录于专栏:软件工程师Michael

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

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

【小结】

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档