2014-10-16 59 views
1

在我的winform項目中,我有一些圖形模型類:Rectangle,Assosiation lineText。 實施例:取決於對象類型的創建模式

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與類生成圖形pathes每個模型:RectangleGraphicPathBuilder等。示例:

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中放置Copy或Clone方法,並讓每個類以其特定方式實現它? – 2014-10-16 13:26:44

+0

你的意思是在模型中添加PathGenerator方法?我想這個模型只包含它的參數:顏色,大小等等,並且能夠顯示我想爲特殊服務IPathBuilder提供的圖形方式。 – 2014-10-16 13:28:12

回答

0

將方法AddShapeToPath添加到IShape接口,該接口將專用於每個形狀。在構建器中調用此方法,而不是嘗試處理每種形狀類型。

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

我想這個模型只包含它的參數:顏色,大小等等,以及我想爲特殊服務IPathBuilder提供的圖形方式的能力。 – 2014-10-16 13:31:11

+0

該形狀僅包含需要構建的數據。如果您需要在形狀本身中構建路徑,則只需在界面中添加一個方法,以便在需要區分形狀時提供路徑 – samy 2014-10-16 13:33:47

+0

好的,非常感謝。 – 2014-10-16 13:40:11

0

我認爲你需要策略設計模式。 Samy已經提供了戰略設計模式實施的一個例子。