程序中的接口

上一篇 / 下一篇  2009-10-10 11:57:08

典型的例子,就是 订阅者模式

消息发布者 怎么能每次发布消息,都能正确 发到 订阅者手上呢,因为
首先有一个接口,比如叫 interface a{},其有一个空方法 比如 function a_xyz();
之后,订阅者们 全要实现这一接口,也就是把空方法 a_xyz();自己填充满
之后,发布者 每次只要执行
$订阅者1->a_xyz('新消息');
$订阅者2->a_xyz('新消息');
……
这样遍历一下就可以了

如果没有这个接口 a{}和里面的 空方法 function a_xyz();会怎么样呢?

从代码层次看,由于没有规范每个订阅者,一定要实现 a_xyz()方法,那么发布者只能这样执行
$订阅者1->ab1('新消息');
$订阅者2->c2de('新消息');
$订阅者3->fgk('新消息');
……
完全无规则的,调用各个订阅者的,不同方法,
这太困难了,这要求 发布者,必须 知道 那么多订阅者不同的方法名,这是匪夷所思的
所以在代码层次看,接口的作用,就是需要知道方法名称

从编程层次看,不使用接口,
但是,我让每个$订阅者,在编码细节的时候,都具备同一方法,比如 function kkk(),然后,
$订阅者1->kkk('新消息');
$订阅者2->kkk('新消息');
……
这样不行吗?
行啊,但是,这种编程,是适合一个人,随心所欲的,不计效率,想到哪写到哪改到哪的方式
不适合,多人,在规定时间,规定地点,按规范完成任务
所以,在编程层次看,接口的作用,是一种规范/契约,要求每个编程的人遵守

从设计层次看,不使用接口,
请问,那么如何表达出来,上面这种设计模式呢?
每一种设计模式,都是一个范式,抽象的范式,
这些范式,都是把现实生活中的物件,以及物件间的关系,经过迭代梳理后,抽象出来的,也就是归纳总结
这种总结到理论的东西,难道还要这样写
$订阅者1->kkk('新消息');
$订阅者2->kkk('新消息');
……
奥,这好像就是说,所以每个订阅者吗,都需要有一个同样的方法名,这样子的话,好像就好一点,是不是这样啊
这样来让人猜?
所以,在设计层次看,接口的作用,是为了表达 抽象的设计

抽象的设计有什么用,复用,和开闭原则
复用有什么用,减少 设计的工作量阿
开闭原则有什么用,在设计层次上,更好的维护升级
所以,复用 和开闭原则,说的都是设计,而不是细节代码,
这谁说的,给我拖出去打死为止……

接口衍生出来各种各样设计,
订阅者模式,也是典型的控制反转ioc,
还有像面向切面设计,依赖注入设计,23种设计模式,都和接口/虚类相关

最简单的,从最低层去理解,接口,就是需要知道一个名字,因为不知道名字,什么都干不了,
但是,这个名字,不能是细节编码的时候,那时想出来的,
必须是设计的时候,先定义好的,才能达到抽象,范式,才好去复用/维护升级 设计

TAG:

 

评分:0

我来说两句

日历

« 2024-04-30  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 3949
  • 日志数: 9
  • 建立时间: 2008-10-27
  • 更新时间: 2010-03-09

RSS订阅

Open Toolbar