【设计模式】(二)-附录A:接口

前言

最近发现大话设计模式这本书越往后学越困难了,所以还是非常有必要把附录A的基础知识整理整理了。

由来

为什么要搞出一个接口来呢?
因为C#,JAVE不支持多重继承,但是同一个类可以实现多个接口。C++支持多重继承,不用走接口的概念。

概念

1.接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合。
2.一旦类实现了接口,类就可以支持接口所指定的所有方法和成员。
3.声明接口在语法上与声明抽象类完全相同。
4.实现接口的类就必须要实现接口中的所有方法和属性。
5.一个类可以支持多个接口,多个类也可以支持相同的接口。

要求

1.不允许提供接口中任何成员的执行方式,所以接口不能实例化。
2.不能有构造方法和字段。
3.不能有修饰符,比如public、private等
4.不能声明虚拟的或静态的等。

实例

我对接口的理解就是当两个不相干的东西,如果要实现相同的行为,就要用到接口。比如说飞机和麻雀,这两个没有什么关系,但是它们都可飞,同样是飞,麻雀用翅膀飞,飞机用引擎飞,超人还能用双手飞,它们是完全不同的对象,如果要实现相同的行为飞,那就可以给它俩定义一个行为的接口IFly,让飞机和麻雀这个两个分别都实现这个接口。可以结合着代码理解。

namespace _04接口
{
    class Program
    {
        static void Main(string[] args)
        {
            {
                //多态   需要哪个就new哪一个
                IFly ifly = new feiji();//new maque();
                //IFly ifly1 = new maque();
                ifly.fei();
                //ifly1.fei();
                Console.ReadKey();
            }
        }
        interface IFly
        {
            //接口成员访问修饰符默认为public,且不能显示使用访问修饰符
            void fei();
        }
        class maque : IFly
        {
            //普通实现接口 一般用这个
             void IFly.fei()
            {
                Console.WriteLine("麻雀会飞");
            }
        }
        class feiji : IFly
        {
            //显示实现接口
            //接口成员访问修饰符默认为public,且不能显示使用访问修饰符
            void IFly.fei()
            {
                Console.WriteLine("飞机会飞");
            }
        }
    }
}

接口和抽象类的区别

上面说到声明接口在语法上和声明抽象类完全相同,那么两者有什么区别呢?
1.类是对对象的抽象,抽象类是对类的抽象,接口是对行为的抽象。
解释:无论是接口,抽象类,类甚至对象,都是在不同层次、不同角度进行抽象的结果,它们的共性都是抽象。
2.如果行为跨越不同类的对象,可使用接口;对于一些相似的类对象,用继承抽象类。
解释:实现接口和继承抽象类并不冲突的,完全可以让超人继承人类,再实现飞行接口。超人除了内裤外穿,基本就是个人的模样。超人不仅会飞,他还力大无穷,这些都是人类所不具备的,但是这些能力可能是其他对象具备的,所以就让超人去实现飞行、力大无穷等接口,然后就可以让超人和飞机比飞,和大象比力气。
3.从设计角度讲,抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类,而接口是根本不知子类的存在,方法如何实现还不确认,预先定义。
解释:事实上,只有小猫的时候,然后就去设计一个动物类,这就会有可能成为过度设计了。抽象类往往是通过重构得来的。如果事先意识到多种分类的可能,那么事先就设计出抽象类也是完全可以的。但是接口就不是那么回事了,比如我们是动物运动会的主办方,在策划时,大家就坐在一起考虑需要组织什么样的比赛,大家商议后,觉得应该设置如跑的快、跳的高、飞的最远等等比赛项目,而此时,主办方其实还不清楚会有什么样的动物来参加运动会,所有的这些比赛项目都可能是完全不相同的动物在比,它们将如何去实现这些行为也不得而知,此时,能做的就是事先定义这些比赛项目的行为接口。

总结

学了一个星期的设计模式了,之前想过会不是那么的简单,但是没想到这么不简单。要想把抽象类和接口用好,还是需要好好用心的去学习设计模式。

猜你喜欢

转载自blog.csdn.net/qq_41306240/article/details/84579140