
求高手帮忙分析下这段C#代码
namespace画图板_工厂模式_{publicinterfaceIShape{voidDraw(Graphicsg);ColorShapeColor{get;set;...
namespace 画图板_工厂模式_
{
public interface IShape
{
void Draw(Graphics g);
Color ShapeColor
{
get;
set;
}
}
public abstract class CShape:IShape
{
private Color shapeColor;
public Color ShapeColor
{
get { return shapeColor; }
set { shapeColor = value; }
}
public CShape(Color color)
{
this.shapeColor = color;
}
#region IShape 成员
public abstract void Draw(Graphics g);
#endregion
}
public class CLine:CShape
{
protected Point p1, p2;
public CLine(Color c, Point p1, Point p2)
: base(c)
{
this.p1 = p1;
this.p2 = p2;
}
public override void Draw(Graphics g)
{
g.DrawLine(new Pen(ShapeColor), p1, p2);
}
}
public class CRectangle :CShape
{
//表示矩形左上角的点
protected int x, y;
protected int width, height;
public CRectangle(Color c, Point p1, Point p2)
: base(c)
{
width = Math.Abs(p1.X - p2.X);
height = Math.Abs(p1.Y - p2.Y);
x= p1.X < p2.X ? p1.X : p2.X;
y= p1.Y < p2.Y ? p1.Y : p2.Y;
}
public override void Draw(Graphics g)
{
g.DrawRectangle(new Pen(ShapeColor), x, y, width, height);
}
}
public class ShapeFactory
{
public static ShapeType type;
public static IShape CreateShape(Color c, Point p1,Point p2)
{
switch (type)
{
case ShapeType.Line:
return new CLine(c, p1,p2);
case ShapeType.Rectangle:
return new CRectangle(c, p1,p2);
default:
return null;
}
}
}
public enum ShapeType
{
Line, Rectangle, Ellipse, FreeDraw, FillRectangle, Curve,Polygon
}
} 展开
{
public interface IShape
{
void Draw(Graphics g);
Color ShapeColor
{
get;
set;
}
}
public abstract class CShape:IShape
{
private Color shapeColor;
public Color ShapeColor
{
get { return shapeColor; }
set { shapeColor = value; }
}
public CShape(Color color)
{
this.shapeColor = color;
}
#region IShape 成员
public abstract void Draw(Graphics g);
#endregion
}
public class CLine:CShape
{
protected Point p1, p2;
public CLine(Color c, Point p1, Point p2)
: base(c)
{
this.p1 = p1;
this.p2 = p2;
}
public override void Draw(Graphics g)
{
g.DrawLine(new Pen(ShapeColor), p1, p2);
}
}
public class CRectangle :CShape
{
//表示矩形左上角的点
protected int x, y;
protected int width, height;
public CRectangle(Color c, Point p1, Point p2)
: base(c)
{
width = Math.Abs(p1.X - p2.X);
height = Math.Abs(p1.Y - p2.Y);
x= p1.X < p2.X ? p1.X : p2.X;
y= p1.Y < p2.Y ? p1.Y : p2.Y;
}
public override void Draw(Graphics g)
{
g.DrawRectangle(new Pen(ShapeColor), x, y, width, height);
}
}
public class ShapeFactory
{
public static ShapeType type;
public static IShape CreateShape(Color c, Point p1,Point p2)
{
switch (type)
{
case ShapeType.Line:
return new CLine(c, p1,p2);
case ShapeType.Rectangle:
return new CRectangle(c, p1,p2);
default:
return null;
}
}
}
public enum ShapeType
{
Line, Rectangle, Ellipse, FreeDraw, FillRectangle, Curve,Polygon
}
} 展开
展开全部
abstract class CShape:IShape
interface IShape
class CLine:CShape
class CRectangle :CShape
class ShapeFactory
========以上就是你用到的类
这是抽象工厂模式。
重点是shapeFactory。
当你向shapeFactory申请一个类时,无需担心类所属,一切由工厂负责,只需要,声明为ishape即可。
interface IShape
class CLine:CShape
class CRectangle :CShape
class ShapeFactory
========以上就是你用到的类
这是抽象工厂模式。
重点是shapeFactory。
当你向shapeFactory申请一个类时,无需担心类所属,一切由工厂负责,只需要,声明为ishape即可。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询