[设计]简单工厂模式

来源:互联网 发布:软件用户手册 由谁来写 编辑:程序博客网 时间:2024/04/30 03:19

[设计]简单工厂模式

场景

  • 能不能有那么一个东西,我进去一个需求出来一个产品,比如我想要一个风雷达,就出来一个可以测风的雷达,我想要一个温雷达,就出来一个测温的雷达。
  • 肯定能,自己建个雷达厂,装上个生产线,要什么有什么*

解决办法

  1. 我们这个雷达厂肯定要有对应的生产线,也就是雷达产生的类
  2. 我们这个这个厂是不是最变化的就是生产线,如果添加一个生产线就能多生产一种雷达,所以我们设计的原则就是把多变易变的东西弄出去让它单独变,不变的稳定下来。
    • 首先我们肯定还是要这上一切都依赖于抽象,所以我们先来一个雷达基类。
public abstract class LidarBase    {        public abstract void CreateLidar();    }
  • 我们弄个两个生产线
 class TempLidar : LidarBase    {        public override void CreateLidar()        {            Console.WriteLine("我是温雷达");        }    } class WindLidar : LidarBase    {        public override void CreateLidar()        {            Console.WriteLine("我是风雷达");        }    }
  • 最后我们给工厂一个生产接口就是接受需求的地方,也就是区分让那条生产线工作的那么个东西,能区分就好。当然好东西还是有好处的,区分的同时可能还可以做点其它的操作。
class LidarFactory    {        public static LidarBase CreatLidar(string lidarFlag)        {            LidarBase lb = null;            switch (lidarFlag)            {                case "wind":                    lb = new WindLidar();                    break;                case "temp":                    lb = new TempLidar();                    break;                default:                    break;            }            return lb;        }    }
  • 最后客户可以这样用了。
 static void Main(string[] args)        {            LidarBase lb1 = LidarFactory.CreatLidar("wind");            lb1.CreateLidar();            LidarBase lb2 = LidarFactory.CreatLidar("temp");            lb2.CreateLidar();            Console.Read();        }

类图

  • 占坑

注意

  1. 是不是感觉这个工厂没有技术含量,每次想加个东西就要加生产线。
  2. 是不是感觉如果这个工厂停电了,妈的,什么雷达都产生不了。如果一个个直接创建停电一个还能产生其它的呢。
    • 同样是不是我们不用操作怎么生产了,交给工厂了。
    • 责任分的更细了,出了问题也方便确定是谁的问题,维护肯定更快更好了
      源码

不论我们面对的是什么,只要敢于面对,这时候才能说我面对了,只要没有死,就别说尽力了。世上千里马少有,伯乐也少有。

原创粉丝点击