C# 实现调整大小/移动/保存访问者模式

C# 实现调整大小/移动/保存访问者模式,c#,winforms,visitor-pattern,C#,Winforms,Visitor Pattern,我正在制作一个画图程序,在那里我可以画矩形/椭圆。在该程序中,我可以移动/调整它们的大小,但也可以保存它们 我的问题是现在我需要创建一个访问者模式(调整大小/移动和保存),但我不知道应该从哪里开始 以下是我目前使用的方法: public abstract void ResizeShape(PosSizableRect posSizableRect, float lastX, float lastY, float newX, float newY); public abstract void Mo

我正在制作一个画图程序,在那里我可以画矩形/椭圆。在该程序中,我可以移动/调整它们的大小,但也可以保存它们

我的问题是现在我需要创建一个访问者模式(调整大小/移动和保存),但我不知道应该从哪里开始

以下是我目前使用的方法:

public abstract void ResizeShape(PosSizableRect posSizableRect, float lastX, float lastY, float newX, float newY);
public abstract void MoveShape(int x, int y);
private void Write(List<Shape> shapes, StreamWriter streamWriter, string tabs = "")
public abstract void ResizeShape(PosSizableRect PosSizableRect,float lastX,float lastY,float newX,float newY);
公共抽象形状(intx,inty);
私有无效写入(列表形状、StreamWriter StreamWriter、字符串选项卡=“”)
对不起,因为我的名声,不能给你照片

public interface IShape
{
    void Resize(PosSizableRect posSizableRect, float lastX, float lastY, float newX, float newY);
    void Move(int dx, int dy);
    void Write (StreamWriter writer, string tabs ="");
    void AcceptVisitor(IVisitor visitor);
}

public interface IVisitor
{
    void Visit(IShape shape);
}
这就是接口,现在是实现(一个示例)


所以你们所有的元素都有一个共同的超类型。。。他们都是从英国继承的shape@Pklaas然而,我没有意识到这样使用这个模式。。。将命令的实现(move,Rezise)移动给访问者是有意义的。在界面IVisitor中有更多的方法用于各个形状,形状的具体实现调用其正确的方法。@pkla就像矩形有x1、y1、x2、y2一样,移动实现将用dx和dy纠正所有这些值,圆或椭圆可能有centerX,centerY和move的实现只会更正这两个值。Elipse和Rectangle是相同的,只是我画的是不同的(DrawEllipse()和DrawRectangle())这两个值使用相同的变量
public class MoveVisitor : IVisitor
{
    private int dx;
    private int dy;

    public MoveVisitor(int dx, int dy)
    {
         this.dx = dx;
         this.dy = dy;
    }
    public void Visit(IShape shape)
    {
         shape.Move(dx,dy);
    }
}