2014-10-16 6 views
1

내 winform 프로젝트에서 나는 그래픽 모델 - 클래스 : Rectangle, Assosiation lineText을 가지고 있습니다. RectangleGraphicPathBuilder 등 예 : 각 모델에 대한 그래픽하는 Pathes를 생성개체 유형에 따라 달라지는 생성 패턴

public class Rectangle 
{ 
    public short Id { get; set; } 
    public short Zindex { get; set; } 
    public Color BackColor { get; set; } 
    public bool Selected { get; set; } 
    public Size Size{ get; set; } 
} 

그리고 클래스와 일반 inteface을 IPathBuilder : 예

public class RectangleGraphicPathBuilder : IPathBuilder 
{ 
    protected override GraphicsPath Build(IShape inShape) 
    { 
     var shape = inShape as Rectangle; 
     var newPath = new GraphicsPath(); 
     newPath.AddRectangle(new Rectangle(shape.Location.X, shape.Location.Y, shape.Size.Width, shape.Size.Height)); 
     return newPath; 
    } 
} 

그리고 나는 모양 동안이 빌더를 호출 몇 가지 패턴을 사용할 필요가 컬렉션에서 반복합니다. 좋아요 :

forech(IShape shape in shapeColection){ 
    var path = IPathBuilder.Builder(shape); 
} 

나는 그것에 대해 어떤 조언도 기뻐할 것입니다.

+0

새로운 개체를 만드는 것이 아니라 개체를 복사하는 것처럼 보입니다. 복사 또는 복제 메서드를 IShape에 넣고 각 클래스에서 고유 한 방식으로 구현하는 방법은 무엇입니까? –

+0

Model에 PathGenerator 메서드를 추가한다는 의미입니까? 그 모델에는 매개 변수 만 포함되어 있다고 가정합니다. 색상, 크기 등. 그리고 SPIial 서비스 IPathBuilder를 제공하고자하는 그래픽 패쉬에 대한 기능이 있습니다. –

답변

0

각 모양에 대해 특수화되는 IShape 인터페이스에 AddShapeToPath 메서드를 추가하십시오. 각 모양 유형을 처리하는 대신 빌더에서이 메소드를 호출하십시오.

public interface IShape { 
    void AddShapeToPath(GraphicsPath path); 
} 

public class Rectangle: IShape 
{ 
    // properties removed for readability 
    public void AddShapeToPath(GraphicsPath path) 
    { 
     path.AddRectangle(new Rectangle(Location.X, Location.Y, Size.Width, Size.Height)); 
    } 
} 

protected override GraphicsPath Build(IShape inShape) 
{ 
    var newPath = new GraphicsPath(); 
    inShape.AddShapeToPath(newPath); 
    return newPath; 
} 
+0

그 모델에는 매개 변수 만이 포함되어 있다고 가정합니다. 색상, 크기 등. 그리고 SPIial 서비스 IPathBuilder를 제공하고자하는 그래픽 pathes 기능. –

+0

셰이프는 자체 빌드에 필요한 데이터 만 포함합니다. 셰이프 자체에 경로를 작성해야하는 경우 셰이프간에 구별해야하는 경우 경로를 제공하기 위해 인터페이스에 메서드를 추가하기 만하면됩니다. – samy

+0

Ok, 고맙습니다. –

0

전략 디자인 패턴이 필요하다고 생각합니다. 전략 설계 패턴 구현의 예가 이미 Samy에 의해 제공됩니다.

관련 문제