PHP设计模式—桥接模式

Posted 幽篁晓筑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP设计模式—桥接模式相关的知识,希望对你有一定的参考价值。

 

定义:

桥接模式(Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化。

 

结构:

  • Abstraction:抽象类。
  • RefindAbstraction:被提炼的抽象类。
  • Implementor:实现类。
  • ConcreteImplementor:具体实现类 。
  • Client:客户端代码。

 

代码实例:

接下来用代码实现一个颜色组合的例子,有三种颜色:黑、白、红,三种形状:圆形、正方形、长方形,可以自由组合。在这个例子中Abstraction表示形状,RefindAbstraction表示圆形、正方形、长方形,Implementor表示颜色,ConcreteImplementor表示黑、白、红。

/**
 * 颜色抽象类
 * Class Colour
 */
abstract class Colour
{
    /**
     * @return mixed
     */
    abstract public function run();
}


/**
 * 黑色
 * Class Black
 */
class Black extends Colour
{
    public function run()
    {
        // TODO: Implement run() method.
        return \'黑色\';
    }
}


/**
 * 白色
 * Class White
 */
class White extends Colour
{
    public function run()
    {
        // TODO: Implement run() method.
        return \'白色\';
    }
}


/**
 * 红色
 * Class Red
 */
class Red extends Colour
{
    public function run()
    {
        // TODO: Implement run() method.
        return \'红色\';
    }
}


/**
 * 形状抽象类
 * Class Shape
 */
abstract class Shape
{
    /**
     * 颜色
     * @var Colour
     */
    protected $colour;


    /**
     * Shape constructor.
     * @param Colour $colour
     */
    public function __construct(Colour $colour)
    {
        $this->colour = $colour;
    }


    /**
     * @return mixed
     */
    abstract public function operation();
}


/**
 * 圆形
 * Class Round
 */
class Round extends Shape
{
    /**
     * @return mixed|void
     */
    public function operation()
    {
        // TODO: Implement operation() method.
        echo $this->colour->run() . \'圆形<br>\';
    }
}


/**
 * 长方形
 * Class Rectangle
 */
class Rectangle extends Shape
{
    /**
     * @return mixed|void
     */
    public function operation()
    {
        // TODO: Implement operation() method.
        echo $this->colour->run() . \'长方形<br>\';
    }
}


/**
 * 正方形
 * Class Square
 */
class Square extends Shape
{
    /**
     * @return mixed|void
     */
    public function operation()
    {
        // TODO: Implement operation() method.
        echo $this->colour->run() . \'正方形<br>\';
    }
}


// 客户端代码
// 白色圆形
$whiteRound = new Round(new White());
$whiteRound->operation();

// 黑色正方形
$blackSquare = new Square(new Black());
$blackSquare->operation();

// 红色长方形
$redRectangle = new Rectangle(new Red());
$redRectangle->operation();


// 运行结果
白色圆形
黑色正方形
红色长方形

 

总结:

  • 桥接模式分离抽象接口及其实现部分,实现解耦,相比继承而言,无疑是一个更好的解决方案。
  • 方便扩展,桥接模式相比继承而言更加灵活,减少创建类的同时还方便组合。
  • 对于两个独立变化的维度,可以使用桥接模式。

 

以上是关于PHP设计模式—桥接模式的主要内容,如果未能解决你的问题,请参考以下文章

PHP设计模式——桥接模式

桥接模式和php实现

桥接模式 - 设计模式 - PHP版

PHP设计模式 - 桥接模式

php 设计模式 --桥接模式

php设计模式-桥接模式