百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>网页制作> php设计模式:桥接模式学习心得(附案例代码)
分享文章到:

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

发布时间:09/01 来源:未知 浏览: 关键词:
假设你有一个外形类(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 $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设计模式:桥接模式学习心得(附案例代码)的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板