php设计模式:桥接模式学习心得(附案例代码)
interface Shape { function fill (); } class circleShage implements Shape { public function fill () { echo '圆形' . PHP_EOL; } } class SquareShape implements Shape { public function fill () { echo '正方形' . PHP_EOL; } }
此刻你想给外形增添色彩——红色、蓝色。那么,你应当怎样做,假如用继承的思想,那么就需要写出四个类,离别如下:
class RedCircleShage implements Shape { public function fill () { echo '红色圆形' . PHP_EOL; } } class RedSquareShape implements Shape { public function fill () { echo '红色正方形' . PHP_EOL; } } class BlueCircleShage implements Shape { public function fill () { echo '蓝色圆形' . PHP_EOL; } } class BlueSquareShape implements Shape { public function fill () { echo '蓝色正方形' . PHP_EOL; } }
但此刻假如我想参加新的外形——三角形,新的色彩——黑色乃至白色。那么我们就需要12个子类(类爆炸),那么有没有什么好的方法来解决呢?
合成(组合)与聚合
解决上述问题前,我们想懂得合成与聚合的含义。
合成聚合原则:尽量使用合成/聚合,尽量不要使用继承。
合成(组合):表示一种团体与部分的关系(强关系),它们具有雷同的生命周期,比方人和心脏的关系,心脏是人的一部分。
聚合:表示一种团体与部分的关系(弱关系),表示A对象可以包括B对象,但B对象并不是A对象的一部分。比方,我们上面所说的外形和色彩,外形可以包括色彩,但色彩并不是外形的一部分。
桥接模式,就是使用聚合来对系统停止解耦的。
桥接模式
定义:将抽象部分与它的实现别离,使他们可以独立的转变
上面的定义很难懂得,用我们上面的例子就是,一个系统大概有多个角度分类(色彩、外形),每一种分类都大概有转变(新增新的外形和色彩),那么我们就可以用多个角度将系统的实现别离出来,落低他们之间的耦合。
那么怎样来实现呢?下面是实现代码:
abstract class FShape { protected $color = null; public function __construct(IColor $color) { $this->color = $color; } public function shape () { echo $this->color->color() . $this->setShape() . PHP_EOL; } protected abstract function setShape (); } class CircleShape extends FShape { protected function setShape () { return '圆形'; } } class SquareShape extends FShape { protected function setShape () { return '正方形'; } } interface IColor { public function color (); } class BlueColor implements IColor { public function color () { return '蓝色'; } } class RedColor implements IColor { public function color () { return '红色'; } }
测试代码如下:
$blueColor = new BlueColor(); $redColor = new RedColor(); $blueCircleShape = new CircleShape($blueColor); $redCircleShape = new CircleShape($redColor); $blueSquareShape = new SquareShape($blueColor); $redSquareShape = new SquareShape($redColor); $blueCircleShape->shape(); $redCircleShape->shape(); $blueSquareShape->shape(); $redSquareShape->shape();
使用桥接模式后,我们的代码就相符了“开闭原则”, 当有新的外形或色彩参加时,我们只需要增加新的类即可。而不消去修改此前的类。
学习引荐:
php视频教程
mysql视频教程
以上就是php设计模式:桥接模式学习心得(附案例代码)的具体内容,更多请关注百分百源码网其它相关文章!