深入接口编程

     现在所说的面向接口编程,是很重要的一个原则,大部分的设计模式的基础。接口的一些知识确实比较晦涩,需要总结一下。开闭原则告诉我们,只要有可能就应该把类的公共部分设计为接口,而不是特定的类类型,这样就可以让方法有非常大的灵活性。

    一个应用程序首先需要定义角色,然后抽象出关于这个角色的方法,把他们放在一个接口中,可以很好的降低程序之间的耦合性。

    接口当然是不能实体化的了,因为他没有构造器,但是却可以声明它为一个引用,让它去指向某个和他类型相同即已经实现了该接口方法的对象。比如ITeacher t;这个t相当于委托的作用,委托到一个属性或者方法,到底是哪个方法,就要看之前声明的是哪个对象,接口变量实现的是这个对象的方法。

    如果一个类实现多个接口,它的对象就有能力扮演应用程序中的多种身份或角色,比如说有一个接口ITeacher,另一个IAdministrator.一个类Professor实现了这2个接口,也就是说一个教授有可能是教师有可能是领导。

    不用接口的例子:不用接口的例子:

    public class Course
   {
      private professor teachingAssistant;
      public professor TeachingAssistant
      {
         get{return teachingAssistant;}
         set{teachingAssistant = value;}
       }
    }

    客户代码:

    Course c = new Course("math"); 
    Professor p = new Professor("zhoulu");
    c.TeachingAssistant = p;//把助教指定为zhoulu

    假如我想把Professor改为Student,那么就要改动很多代码,几乎要重写。现在来看看用接口实现的方式。

    public class Course
    {
        private ITeacher teachingAssistant;
        public ITeacher TeachingAssistant
        {
            get{ return teachingAssistant;}
            set{teachingAssistant = value;}
        }
     }

    Interface ITeacher
    {
        void bool AgreeToTeach(Course c);
        void Designate Textbook(TextBook b,Course c);
    }    

    //客户代码如下:
    Course c = new Course("math");
    Professor p = new Professor("zhoulu");
    c.TeachingAssistant = p;
    p.AgreeToTeach();   

    现在我想把Professor改为Student,只要修改2行代码:实体化Student类,接口变量委托给TeachingAssisant
    Student s = new Student("miaofang");
    c.TeachingAssistant = s;

    可见接口的威力是多么巨大,这里快速的响应需求变化,只需要改客户代码就可以了。因为类都实现了该接口,所以接口变量(委托)就可以根据具体指向哪个对象来套用那个对象的方法。非常重要的一个思想。

    在.net Framework中,有一个接口IList,所有的集合类都实现了这个接口,那么我们就可以把IList list当作某个方法的参数,用类似的方法去看具体是操作那个的对象,使ArrayList,or HashTable。
    public class class1
    {
       ....
       public void Method(IList list)
       {
          //指定时操作那个对象
       }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值