勇哥谈谈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
版权声明:本文为博主原创文章,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:
  • 评论列表:
  •  访客
     发布于 2020-01-21 08:40:02  回复该评论
  • 勇哥 多讲点设计模式、架构在视觉系统上面的应用啊
    •  勇哥,很想停止
       发布于 2020-01-23 12:13:34  回复该评论
    • 我也正在新写一个视觉的类库,把所知道的设计原则用上去。如果适用且稳定的话,我会发布netMarketing类库的新版本。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864