开篇我先讲述我的需求,如何引出抽象类、接口选择的这个问题。
一、需求
我们是开发一款APP,想用工厂模式做一个消息通知的体系,包括:站内信、微信模板消息、app消息推送。
设计如下:
·**抽象消息父类**:NoticeAbstrace.php
![image.png](/img/bVbGItY)
·站内信子类:Msg.php extends NoticeAbstract
·模板消息子类:Wechat.php extends NoticeAbstract
·推送子类:Push extends NoticeAbstract
业务流程中,统一调用Notice类中的某个方法,如taskPass;
在Notice类中,根据业务模块调用的类型,选择性实例化上面三个子类,调用相同的方法,但是参数不同。实现多个消息渠道的消息下发。
二、为什么选择用抽象类,不用接口。
这个问题答案很简单,我没用过接口。所以,查资料,梳理两者的区别,如果你也有这种误区,请耐心看完这篇不算长的文章,哪里说得不对,请在评论区留言~
三、抽象类、接口的区别
1、抽象类定义的方法,子类都得实现。接口不用;
2、接口可以被多继承;
3、抽象类可以定义成员变量,接口不行,只能定义常亮;
(我觉得知道上面三个大区别就好了,其他诸如继承用的关键字不同,不必赘述)
四、两者如何选择
1、如果你的业务流程是固定的,就比如我上面这个例子(任务完成,必须发送通知,只是发送的通道不同而已)。那么选择抽象类。 因为抽象类定义的方法,子类必须得实现。
2、流程不固定,比如订单完成需要调用订单通知、会员奖励通知、物流完成通知,那么这三个通知写成接口。多继承,进而调用其方法就好了。
如何选择,就看这两点。明白了这个意思,下手开发就好了,不需要一定把书面的那些定义再看一遍,我认为先把功能实现出来,之后才能看得下去那些教条的定义。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。