首页后端开发PHPphp设计模式:桥接模式学习心得(附案例代码)

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

时间2024-02-02 08:57:03发布访客分类PHP浏览536
导读:收集整理的这篇文章主要介绍了php设计模式:桥接模式学习心得(附案例代码),觉得挺不错的,现在分享给大家,也给大家做个参考。假如你有一个形状类(Shape ,目前它扩展出了两个子类,圆形类和正方形类。伪代码如下:interface ShaP...
收集整理的这篇文章主要介绍了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 $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设计模式:桥接模式学习心得(附案例代码)的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: php设计模式:桥接模式学习心得(附案例代码)
本文地址: https://pptw.com/jishu/596629.html
详解PHP网页缓存技术优点及代码实例 详解php实现网页上一页下一页翻页过程

游客 回复需填写必要信息