·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> 什么是接口(入门篇)——使你的程序功能丰富

什么是接口(入门篇)——使你的程序功能丰富

作者:佚名      ASP.NET网站开发编辑:admin      更新时间:2022-07-23

重复劳动

在一个主项目中,经常会放置多个子功能的入口,这些入口有可能是按钮,有可能是下拉菜单。

初始开发起来,肯定很轻松,在界面上放置一个按钮,给它一个名字,然后到他的Click事件中编写一段代码,让子功能的界面弹出。

但是随着子功能的不断变多,这个毫不起眼的几个小工作,我们在不停重复的进行。

最头疼的是,突然有一天,你的PM跟你说,这个界面不要了,或者是这个子功能的入口换成另一个窗体的时候,你已经不记得这不起眼的几行代码在哪里了。

问题出在哪?

这样的设计模式,也是初学者最容易走的开发方式。

我们从逻辑上来分析,功能模块应该是由其自身决定在界面上显示什么内容,自己应该以何种方式被打开。

想象一下我们的Windows操作系统,每一个程序的图标,以及图标上的文字,都应当由程序各自来决定,而不是操作系统,只有这样,这些图标、文字、甚至于其存在,都可以轻松得进行修改。

使用接口将属于"子功能"的功能还给"子功能"

我们可以模仿Windows的做法,比如图标啦、文字啦、以及打开后"要做什么事",这些东西全部做成一个接口

 1 /// <summary>
 2 /// 定义一个接口,用于描述一个子功能模块
 3 /// </summary>
 4 public interface ISubMoudle
 5 {
 6     /// <summary>
 7     /// 功能名称
 8     /// </summary>
 9     string ModuleName { get; }
10 
11     /// <summary>
12     /// 图标文件的路径,若不使用图标,则返回空字符或null
13     /// </summary>
14     string ICONPath { get; }
15 
16     /// <summary>
17     /// 打开这个功能模块
18     /// </summary>
19     void Open();
20 }

我们以后制作的所有子功能模块都实现该接口,举个例子

 1 /// <summary>
 2 /// 一个显示当前时间的子功能
 3 /// </summary>
 4 public class ShowTimeMoudle :ISubMoudle
 5 {
 6 
 7     public string ModuleName
 8     {
 9         get { return "显示时间"; }
10     }
11 
12     public string ICONPath
13     {
14         get { return ""; }
15     }
16 
17     public void Open()
18     {
19         Console.WriteLine(DateTime.Now.ToString());
20     }
21 }

功能内的主要内容,都在Open方法中体显。

使用子功能

子功能已经定义好了

让我们来赶紧使用它吧

首先,要主功能模块中,我们要有一个列表

列表中详细地记录了所有的ISubMoudle对像

然后,我们动态地,将这些内容输出到一个窗体、一个控制台或一个Web中去,我们以控制台为例

 1         static void Main(string[] args)
 2         {
 3             List<ISubMoudle> moudleList = new List<ISubMoudle>();
 4             moudleList.Add(new ShowTimeMoudle());
 5 
 6             //开始将moudleList中的所有功能开始输出
 7             for (int i = 0; i < moudleList.Count; i++) 
 8             {
 9                 Console.WriteLine("{0} : {1}", i + 1, moudleList[i].ModuleName);
10             }
11 
12             Console.ReadLine();
13         }

进入子功能

子功能已经动态地显示出来了,我们准备使用前面对应的数字,进行各个自功能。

其实就是,我们分析录入的字符,转化为数字类型,在moudleList中对找对应的位置,然后调用其Open()方法

 1             List<ISubMoudle> moudleList = new List<ISubMoudle>();
 2             moudleList.Add(new ShowTimeMoudle());
 3 
 4             //开始将moudleList中的所有功能开始输出
 5             for (int i = 0; i < moudleList.Count; i++) 
 6             {
 7                 Console.WriteLine("{0} : {1}", i + 1, moudleList[i].ModuleName);
 8             }
 9 
10             string cmd = Console.ReadLine();
11             int j = int.Parse(cmd);
12             ISubMoudle moudle = moudleList[j - 1];
13             moudle.Open();
14 
15             Console.ReadLine();

10 - 13行是追加的代码

测试

 

结尾

以上,就是演示了接口的另一种用法 : 动态地扩展你的程序,将你开发的关注点仅仅放在功能模块内部

在这里,我们以运行时的方式,将所有的子模块输出到了控制台界面上: