php设计模式:桥接模式学习心得(附案例代码)

php设计模式:桥接模式学习心得(附案例代码),第1张

概述php设计模式桥接模式学习心得(附案例代码) 假如你有一个形状类(Shape),目前它扩展出了两个子类,圆形类和正方形类。伪代码如下:

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 $@R_419_6004@ = null;    public function __construct(I@R_419_6004@ $@R_419_6004@)    {        $this->@R_419_6004@ = $@R_419_6004@;    }    public function shape ()    {        echo $this->@R_419_6004@->@R_419_6004@() . $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 I@R_419_6004@{    public function @R_419_6004@ ();}class Blue@R_419_6004@ implements I@R_419_6004@{    public function @R_419_6004@ ()    {        return '蓝色';    }}class Red@R_419_6004@ implements I@R_419_6004@{    public function @R_419_6004@ ()    {        return '红色';    }}

测试代码如下:

$blue@R_419_6004@ = new Blue@R_419_6004@();$red@R_419_6004@ = new Red@R_419_6004@();$blueCircleShape = new CircleShape($blue@R_419_6004@);$redCircleShape = new CircleShape($red@R_419_6004@);$blueSquareShape = new SquareShape($blue@R_419_6004@);$redSquareShape = new SquareShape($red@R_419_6004@);$blueCircleShape->shape();$redCircleShape->shape();$blueSquareShape->shape();$redSquareShape->shape();

使用桥接模式后,我们的代码就符合了“开闭原则”, 当有新的形状或颜色加入时,我们只需要添加新的类即可。而不用去修改之前的类。

学习推荐:

php视频教程

mysql视频教程

总结

以上是编程之家为你收集整理的php设计模式:桥接模式学习心得(附案例代码)全部内容,希望文章能够帮你解决php设计模式:桥接模式学习心得(附案例代码)所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/997454.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存