冉冉说
理解面向对象事实上,如果按照面向对象来理解,这个公共类在你代码中的位置是非常模糊的,你首先需要回答我,公共类是哪些对象的抽象?(其实会出现公共类一说,基本上都是用框架的后遗症)比如说我现在有"会飞的鸭子""橡皮材质的鸭子""石头雕刻的鸭子"那么前面这些,我能抽象出一个所谓的"鸭子类",这才是"面向对象",而你这边所谓的公共类里拥有"打折方法","充值方法",我暂时无法想到你是怎样进行抽象的,才能让这样一个抽象类中同时拥有这两个方法的设计模式中为什么需要面向接口编程我理解的为什么需要设计模式设计模式是长期实践中,前人总结出来的代码的一些写法,不玩设计模式,代码很难做到高内聚低耦合,敏捷开发下会被玩死面向接口的好处这个基本上看看策略模式你就能感觉出来了我这里稍微举例一下按照公共类来写使用伪代码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->打折->充值方法();
}
}
这样,当我需要一个新的和充值有关的,我只需要实现充值接口,就不会影响到原先的类这样简单写一下,你不一定能理解,还是建议看一下设计模式的策略模式,会比较容易理解