在日常开发中,不少时候都会遇到if else 、 if else if else,如果遇到逻辑多一点的业务,那么可以考虑用Switch来代替,代码效率和识别度都比if else会好上不少,但是如果遇到更多更复杂的逻辑,一个入口可能有几十个条件判断的时候用Switch来处理,那么结果是什么?满屏的Switch case break。
最近在做项目的时候就发现了这个问题,虽然不是满屏的,但是也有10多个,虽然容易阅读,但是看起来太吃力了,不断地滚动鼠标,于是就想到用委托来代替。
1、平时通俗一点理解就是,委托可以把方法当成参数一样传递,委托是一个"特殊"的类型。
2、委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 System.Delegate 类。
二、委托的优点和缺点
优点:1、解耦,降低代码耦合度 2、减少工作。(如上例子,不用满屏的Switch case break)
缺点:让代码变得难以理解,无法知道底层的代码操作逻辑。(就好比我们日常的工作,如果上级给你交办的事情你自己去做了,你自己清楚是怎么去做的,如果你委托另外一个人去帮你做了,那么你只知道事情做好了,并不知道具体怎么做的)。
三、使用地方场景
委托的使用最好是一次性使用,一次性使用的意思就是后期不需要去维护代码,不太改动的代码,否则时间太长,开发人员在不记得业务逻辑的情况下,会给自己挖坑,理解不了代码,把自己埋了。
归根结底就是代码最终的目的是实现功能,基本的原则是便于理解,委托能不使用就不要使用。
四、委托的使用
此处只简单的写了常规的委托和字典(Dictionary)+委托,因为字典加委托只需要比较一次(查一次hash表),替代Switch更好,更重要的是容易扩展。当然也可以通过工厂模式、反射等方法来替代。
1、创建委托函数
public enum Status { A = 1, B = 2, C = 3 }