大家好,问个问题:设计模式中一个抽象类被多个类继承 比如:'充值抽象类' 被'打折类','充值返现类'继承,这样面向接口编程 比 直接在一个公共类中提供 '打折方法' 和 '充值返现方法' 的好处是什么?
2 回答
料青山看我应如是
TA贡献1772条经验 获得超8个赞
都可以达到代码的复用。说白了,就是继承和组合的区别。优缺点自己搜索下。
实际中根据实际情况取舍,一般来说建议多使用组合,因为继承的结构是静态的,而组合的动态的。
冉冉说
TA贡献1877条经验 获得超1个赞
理解面向对象
事实上,如果按照面向对象来理解,这个公共类在你代码中的位置是非常模糊的,你首先需要回答我,公共类是哪些对象的抽象?(其实会出现公共类一说,基本上都是用框架的后遗症)
比如说
我现在有
"会飞的鸭子"
"橡皮材质的鸭子"
"石头雕刻的鸭子"
那么前面这些,我能抽象出一个所谓的"鸭子类"
,这才是"面向对象",而你这边所谓的公共类里拥有"打折方法","充值方法",我暂时无法想到你是怎样进行抽象的,才能让这样一个抽象类中同时拥有这两个方法的
设计模式中为什么需要面向接口编程
我理解的为什么需要设计模式
设计模式是长期实践中,前人总结出来的代码的一些写法,不玩设计模式,代码很难做到高内聚低耦合,敏捷开发下会被玩死
面向接口的好处
这个基本上看看策略模式
你就能感觉出来了
我这里稍微举例一下
按照公共类来写
使用伪代码
class 公共类 { function 打折方法(); function 充值返现方法(); }class 继承类1 extends 公共类 { function 打折方法(); }class 继承类2 extends 继承类1 { function 打折方法(); }//使用继承类1//使用继承类2
那么现在,我突然有新的需求,我被迫修改的是公共类,那么我继承类1和继承类2都需要改,因为继承类中会有多余的方法,这既不是面向对象,同时这也是很致命的,每次改公共类都会影响到继承类,会出现很多隐患
看看面向接口编程
interface 充值接口 { function 充值方法(); }//这个只是按照你的思路写,具体这个规定这个接口应不应该实现底下的两个类还有待商榷class 打折类 implements { function 充值方法(){ //必须实现接口的方法 //具体实现打折 } }class 充值返现类 implements { function 充值方法(){ //具体充值返现 } }class 类1 { public $返现; function __construct(){ //这样写其实还是要改代码的,其实不是策略模式,就是现在这样写够理解就行 $this->返现 = new 充值返现类; } function 返现() { $this->返现->充值方法(); } }class 类2 { public $打折; function __construct(){ //这样写其实还是要改代码的,其实不是策略模式,就是现在这样写够理解就行 $this->打折 = new 打折类; } function 打折() { $this->打折->充值方法(); } } 这样,当我需要一个新的和充值有关的,我只需要实现充值接口,就不会影响到原先的类
这样简单写一下,你不一定能理解,还是建议看一下设计模式的策略模式,会比较容易理解
- 2 回答
- 0 关注
- 495 浏览
添加回答
举报
0/150
提交
取消