2
我有一個類,名爲雪碧:Decorator模式中的裝飾器是否可用於添加其他方法?
public abstract class Sprite
{
protected Texture2D Image { get; set; }
protected Vector2 position;
public Sprite(Texture2D image, Vector2 position)
{
Image = image;
this.position = position;
}
public void Draw(SpriteBatch imageBatch)
{
spriteBatch.Draw(Image, position, Color.White);
}
}
從它繼承是AnimatedSprite:
public abstract class AnimatedSprite : Sprite
{
protected Point SheetSize { get; set; }
protected Point CurrentFrame { get; set; }
protected Point FrameSize { get; set; }
protected int MillisecondsPerFrame { get; set; }
protected int TimeSinceLastFrame { get; set; }
public AnimatedSprite(Point sheetSize, Point currentFrame, Point frameSize,
int millisecondsPerFrame, int timeSinceLastFrame, Texture2D image, Vector2 position)
: base(image, position)
{
SheetSize = sheetSize;
CurrentFrame = currentFrame;
FrameSize = frameSize;
MillisecondsPerFrame = millisecondsPerFrame;
TimeSinceLastFrame = timeSinceLastFrame;
}
public void Draw(SpriteBatch spriteBatch)
{
spriteBatch.Draw(Image, position,
new Rectangle(CurrentFrame.X * FrameSize.X,
CurrentFrame.Y * FrameSize.Y,
FrameSize.X, FrameSize.Y), Color.White);
}
}
從Inhereting即是侵略者:
public class Invader : AnimatedSprite
{
public Invader(Point sheetSize, Point currentFrame, Point frameSize,
int millisecondsPerFrame, int timeSinceLastFrame, Texture2D image, Vector2 position)
: base(sheetSize, currentFrame, frameSize, millisecondsPerFrame, timeSinceLastFrame,
image, position)
{
}
}
我認爲這將是一個很好的實現裝飾模式。問題是,在大多數裝飾器模式的例子中,我看到了由抽象類繼承的根抽象類的一個方法,沒有其他的東西,我確實有。
我可以在這裏使用裝飾模式嗎?我可以在抽象的AnimatedSprite類中添加額外的東西嗎?
我知道 - 但我認爲它可能是裝飾者模式的一個很好的候選人。或者是? – TheDude 2011-02-25 20:45:51
謝謝,我想我現在明白了。我擁有的不是Decorator模式,因爲Sprite(imageBatch)本身沒有任何反應。 – TheDude 2011-02-25 21:05:32