2015-02-26 29 views
1

我正在制作一个绘制程序,我可以制作矩形/椭圆。在该程序中,我可以移动/调整它们的大小,但也可以保存它们。实现调整大小/移动/保存访问者模式

我的问题是现在我需要制作访问者模式(调整大小/移动并保存)但我不知道我应该从哪里开始。

这些是我目前使用的方法:

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 = "") 

抱歉不能给你,因为我的名气图片...

+0

所以你所有的元素都有一个共同的超类型? ... –

+0

他们都继承形状 – Pklaas

回答

1
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); 
} 

那接口,现在实施(一个例子)

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); 
    } 
} 
+0

一个很好的参考是http://www.dofactory.com/net/visitor-design-pattern –

+0

@Pklaas但是我没有得到使用这种模式的感觉像这样...感觉将会使命令(移动,重制)的实施移动到访问者。对于界面IVisitor中的各个形状,您有更多的方法,并且形状的具体实现会调用其适当的方法。 –

+0

@Pklaas像一个矩形有x1,y1,x2,y2,移动实现可以用dx和dy修正所有这些值,圆或椭圆可能有centerX,centerY和移动的实现只会修正2个值。 –