[英]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 A
和Has A
關系,而繼承僅具有Is A
關系。 它可能與您的派生類外部無法區分,因此也可能只是繼承。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.