繁体   English   中英

在抽象类中使用Decorator模式

[英]Using Decorator pattern with abstract class

我可以通过更改属性Name的输出来装饰抽象类Player吗? 例如我的班级是:

public abstract class Player
{
    private FootBall ball;

    private string name;

    public Player(FootBall ball, string name)
    {
        this.name = name;
        this.ball = ball;
    }

    public string Name
    {
        get
        {
            return this.name;
        }
    }


    public virtual void Update()
    {
        Console.WriteLine(string.Format("Player {0} says that ball is at position {1} {2} {3}", this.Name, this.ball.Position.PositionX, this.ball.Position.PositionY, this.ball.Position.PositionZ));
    }

}

我有两个类GamePlayer和Referee都继承了Player:

 GamePlayer : Player { // implementation }
 Referee: Player { // implementation }

我想用两个装饰来装饰属性Name:SoccerPlayer和BasketBallPlayer。 例如,属性名称应返回

John - basketballPlayer
John - soccerPlayer:
John - basketballPlayer - soccerPlayer

装饰器模式最适合与接口一起使用。 如果要与抽象基类一起使用它,则需要使要修饰的任何方法都成为virtual以便派生类可以在委派给修饰的基类base.MyMethod方法之前重写它们以进行自己的处理。

此时,您基本上已经在使用继承。 装饰的基类和继承之间的唯一区别是,在装饰器模式中,派生类将与基类具有Is AHas A关系,而继承仅具有Is A关系。 它可能与您的派生类外部无法区分,因此也可能只是继承。

https://msdn.microsoft.com/en-us/library/9fkccyh4.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM