簡體   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