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();
    
    
    // 运行结果
    白色圆形
    黑色正方形
    红色长方形

    总结:

    • 桥接模式分离抽象接口及其实现部分,实现解耦,相比继承而言,无疑是一个更好的解决方案。
    • 方便扩展,桥接模式相比继承而言更加灵活,减少创建类的同时还方便组合。
    • 对于两个独立变化的维度,可以使用桥接模式。
  • 相关阅读:
    yolo_to_onnx ValueError: need more tan 1 value to unpack
    yolo_to_onnx killed
    C++ 实现二维矩阵的加减乘等运算
    Leetcode 1013. Partition Array Into Three Parts With Equal Sum
    Leetcode 1014. Best Sightseeing Pair
    Leetcode 121. Best Time to Buy and Sell Stock
    Leetcode 219. Contains Duplicate II
    Leetcode 890. Find and Replace Pattern
    Leetcode 965. Univalued Binary Tree
    Leetcode 700. Search in a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/woods1815/p/14951985.html
Copyright © 2011-2022 走看看