zoukankan      html  css  js  c++  java
  • 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();
    
    
    // 运行结果
    白色圆形
    黑色正方形
    红色长方形

    总结:

    • 桥接模式分离抽象接口及其实现部分,实现解耦,相比继承而言,无疑是一个更好的解决方案。
    • 方便扩展,桥接模式相比继承而言更加灵活,减少创建类的同时还方便组合。
    • 对于两个独立变化的维度,可以使用桥接模式。
  • 相关阅读:
    面向对象——多态
    面向对象——继承
    面向对象—封装
    数组
    控制语句
    认识Java
    出入境大厅流程
    2021上半年感想
    记录2020
    读后感《从三分钟热度到一万个小时》
  • 原文地址:https://www.cnblogs.com/woods1815/p/14951985.html
Copyright © 2011-2022 走看看