设计模式中工厂模式实际体验

本文介绍如何使用工厂模式简化图形绘制代码。通过抽象工厂类ShapeFactory,避免了实例化不同图形时重复的switch代码块,使绘图操作更加简洁高效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
 使用工厂模式以前, 绘制每个图元时都要使用new操作符进行实例化, 具体如下:
public static void OnMouseDown(object sender, MouseEventArgs e)
        {
            NCControl ncControl = sender as NCControl;
            startPoint = new Point(e.X, e.Y);
            switch (ncControl.CurrentOperator)
            {
                case Operator.Line:
                    ncControl.CurrentShape = new Line();    //实例化
                    ncControl.CurrentShape.Pen = ncControl.CurrentPen;
                    break;
                case Operator.Ellipse:
                    ncControl.CurrentShape = new Ellipse(); //实例化
                    ncControl.CurrentShape.Pen = ncControl.CurrentPen;
                    break;
                default:
                    break;
            }
        }
结果是很不爽!!
用了工厂模式以后呢, 上面的代码就变成如下样子啦:
  public static void OnMouseDown(object sender, MouseEventArgs e)
        {
            NCControl ncControl = sender as NCControl;
            startPoint = new Point(e.X, e.Y);
            //使用抽象工厂设计模式后,switch代码段就可以去掉了!
            string shapename = ncControl.CurrentOperator.ToString();
            ncControl.CurrentShape = ShapeFactory.CreateShape(shapename); 
            ncControl.CurrentShape.Pen = ncControl.CurrentPen;
        }
是不是很简洁呢。
这其中的奥秘也就在ShapeFactory抽象工厂类中:
public abstract class ShapeFactory
    {
        public static IShape CreateShape(string name)
        {
            try
            {
                string typename = "你的命名空间."+ name;  
                Type shapetype = Type.GetType(typename, true);
                IShape shape = Activator.CreateInstance(shapetype) as IShape;
                return shape;
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
            }
            return null;
        }
    }
类继承关系如下:
IShape-->SimpleShape--> Line/Ellipse/....
如果您对工厂模式不熟,可以参考: http://www.qqgb.com/Program/CCC/CCCSJ/Program_56488.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值