谈谈C#中的接口Interface的常用套路
带大家回顾一下面向对象编程和设计模式的精髓概念。
面向对向程序的三大特征:
封装,隐藏内部实现
继承,复用现有代码
多态,改写对象行为
设计模式的核心思想:
(1)设计模式最根本的意图是适应需求的变化。
(2)编码应采用高内聚低耦合设计思想
(3)针对接口编程,而不要针对实现编程
(4)优先使用聚合,而不是继承
(5)坚持开闭原则(OCP)
注: 内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事,它描述的是模块内的功能联系; 耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、 进入或访问一个模块的点以及通过接口的数据。 开闭原则(OCP)是面向对象设计中“可复用设计”的基石,是面向对象设计中最重要的原则之一,其它很多的设计原则都是实现开闭原则的一种手段。 开闭原则中“开”,是指对于组件功能的扩展是开放的,是允许对其进行功能扩展的;开闭原则中“闭”,是指对于原有代码的修改是封闭的,即不应该修改原有的代码。
按上面的思想,勇哥编了一段小程序。
在这个小例子里面用到了:
封装、继承、多态
设计模式思想(1)、(2)、(3)、(5)
/// <summary> /// 计算方法一的实现: 不打折 /// </summary> public class m1 : ICal { public T Add<T>(T x, T y) { dynamic res=(float.Parse(x.ToString()) + float.Parse(y.ToString())); return (T)res; } } /// <summary> /// 计算方法二的实现:半价 /// </summary> public class m2 : ICal { public T Add<T>(T x, T y) { dynamic res = (float.Parse(x.ToString()) + float.Parse(y.ToString()))*0.5; return (T)res; } } /// <summary> /// 计算类 /// </summary> public class Cal { /// <summary> /// 计算两个商品的总金额 /// </summary> /// <param name="method">传入计算方法</param> /// <param name="x">商品一金额</param> /// <param name="y">商品二金额</param> /// <returns></returns> public float Sell(ICal method,float x,float y) { return method.Add<float>(x, y); } } /// <summary> /// 计算方法的接口 /// </summary> public interface ICal { T Add<T>(T x, T y); }
调用的例子:
private void button1_Click(object sender, EventArgs e) { //初始化计算类 Cal f = new Cal(); //初始化两种计算方法类:不打折/半价 m1 method1 = new m1(); m2 method2 = new m2(); MessageBox.Show("不打折:" + f.Sell(method1, 20, 30)); MessageBox.Show("半价:" + f.Sell(method2, 20, 30)); }
上面这个例子中,两个算法类都继承了算法接口ICal。
类Cal的Sell方法可以传入实现了接口ICal的任何一个算法类进行计算。
如果希望有更多的算法,可以再编写新的继承接口ICal的类即可,不需要修改计算类Cal,很好的遵守了开闭原则。
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!