我来说几句吧。
1,接口是稳定不变的。
如我预先定义一个接口为小狗:
public interface IDog
{
void Bark();
}
public class MyDoc: IDog
{
public void Bark()
{
Console.WriteLine("wang, wang");
}
}
如果你的小狗某天会飞了。
就成了
public class MyDoc: IDog
{
public void Bark()
{
Console.WriteLine("wang, wang");
}
public void Fly()
{
Console.WriteLine("Flying now");
}
}
一般的情况下我们不去扩张原来的接口IDog,你也可以看得出把Fly方法放入IDog是不合理的(不是所有的小狗都会飞)。这时候你应该定义新接口给Fly方法。
public interface IFlyable
{
void IFlyable();
}
然后MyDog的实现应该是:
public class MyDoc: IDog, IFlyable
{
public void Bark()
{
Console.WriteLine("wang, wang");
}
public void Fly()
{
Console.WriteLine("Flying now");
}
}
2. 这样的好处是什么呢?
比如我在某个地方用到MyDog,如MyHouse。
直接放入MyDog会怎么样?
public class MyHouse
{
MyDog _dog = null;
public MyHouse(MyDog dog)
{
_dog = dog;
}
//有人进来,狗叫
public void ComeIn()
{
_dog.Bark();
}
//拍电影
public void ShootAMovie()
{
_dog.Fly();
}
}
但有一天需求改变了。(软件里面需求改变是正常的)要求换你的狗而不是我的狗,
public class YourDog: IDog, IFlyable
{
public void Bark()
{
Console.WriteLine("wang, wang");
}
public void Fly()
{
Console.WriteLine("Flying now");
}
}
MyHouse你怎么办?重新实现一遍?你原来的MyHouse其实还有一个坏处是“与你的MyDog是紧密耦合的”。当代软件不够灵活的地方就在于紧耦合,而接口正是解决这种情况的灵丹妙药。
所以你一开始就不应该让MyHouse和MyDog紧密耦合,应该对接口进行编程,如下:
public class MyHouse
{
IDog _dog = null;
IFlyable _flyer = null;
public MyHouse(IDog dog, IFlyable flyer)
{
_dog = dog;
_flyer = flyer;
}
//有人进来,狗叫
public void ComeIn()
{
_dog.Bark();
}
//拍电影
public void ShootAMovie()
{
_flyer.Fly();
}
}
这样无论你是传MyDog或者YourDog都可以的,如下构造
MyHouse house = new MyHouse(new MyDog(), new MyDog());
MyHouse house = new MyHouse(new YourDog(), new YourDog());
甚至我们可以让MyDog在ComeIn里面叫唤,让YourDog在ShootAMovie里面拍电影,像如下构造
MyHouse house = new MyHouse(new MyDog(), new YourDog());
就说这么多吧。
1.你可以让一个类多个接口,但是你只能继承自一个基类,变相的实现了多继承
2.接口可以让程序的耦合度减少。例如抽象工厂就是很好的例子。
3.接口可以方便团队开发。类与类通过接口通信,让开发和维护变得简单。
还有很多!不过好像都是为了多态而存在的!!
更好的支持多态呀
而且接口是支持多重继承的
看完大话设计模式前几章,就会了解