面试中无数次被问及到什么是接口,什么是抽象类,接口和抽象类有什么区别?什么是委托,什么是事件。面试
请写出猫叫了,老鼠跑了的例子。。。。。算法
这些东西对于一些初学者来讲可能还真的有点搞不懂,对于通常工做5,6年以上的人来讲,实在不屑一提,
编程
类:对事物或者某一个物体的归纳描述浏览器
抽象类:对于一类事物的高度抽象。能够实现任何接口函数
接口:对方法的一组抽象提取。工具
事件:暴露给关联类的自定义实现,用于解除两个类之间的耦合。blog
在基于模板Template模式中,也是咱们会无心中就会使用到的方法。将一些不变的公共的部分,提取出来方法父类当中,而对于每个独立变化的点,咱们将接口
他们封装为抽象方法。事件
对于上述的一个模板,咱们标记为红色的方法,打印结果,它有可能在控制台打印输出,或者放在浏览器中显示等等。对于这个点,它是可变的,也就是咱们所说的get
它是抽象的。
在策略Strategy模式当中,咱们了解到它是对抽象的策略算法的调用。例如,超市里面计算商品的结果。
可能部分商品打3,5折,也有可能不打折,或者还有不少种可能,而咱们最终要获得商品的总价格。对于上述的策略,咱们认为它是可变的,是抽象的。
经典的策略模式代码可能以下:
对于不一样的策略方法,咱们只要再实现对应不一样的IAction便可。
在C#中,咱们知道有个AOP的概念,俗称面向切面编程。若是咱们不经过自定义的特性Attribute,或者第三方AOP方法拦截去实现,有没有办法实现呢。
如下是我在项目中常常使用到的方法,懒人就是懒啊。
我我的将它理解为解除两个类之间的耦合的最佳工具。仍是用猫叫了,老鼠跑了来演示下。
在经典的观察者模式当中,或许也会存在一些耦合,仔细观察上述代码,两个类之间的没有任何一方类的调用,咱们称它们没有任何的耦合。
那么如何能让她们相互通知,那就是依赖于咱们的事件。
代码虽然很简单,可是项目当中,大伙历来不知道如何妙用它。最近的项目看见同事常常在父窗体调用子窗体,而后子窗体须要刷新父窗体的控件的时候。
直接在子窗体中将父窗体放入子窗体的构造函数中,直接产生了依赖。若是能在子窗体中声明一个事件,将它理解为要发送的消息。父窗体来实现这个接受消息的函数,是否是更加优雅点呢。