• 设计模式之桥接模式(php实现)


    
    
    github地址:https://github.com/ZQCard/design_pattern

    /*
    * * 桥接模式 * 优点: * 1、分离抽象接口及其实现部分。提高了比继承更好的解决方案。 * 2、桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。 * 3、实现细节对客户透明,可以对用户隐藏实现细节。 * 缺点: * 1、桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。 * 2、桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性。 * * 例子: 形状和颜色 各种颜色的形状进行组合,如果进行多层继承,添加一个颜色或者形状会增加很多类 */

    (1) Color.class.php(颜色接口,用户规范子类实现)

    <?php
    
    namespace Bridge;
    
    interface Color
    {
        public function paint($shape);
    }

    (2)Gray.class.php(灰色子类)

    <?php
    
    namespace Bridge;
    
    class Gray implements Color
    {
        public function paint($shape)
        {
            var_dump("灰色的".$shape);
            echo '<br/>';
        }
    }

    (3)Black.class.php(黑色子类)

    <?php
    
    namespace Bridge;
    
    class Black implements Color
    {
        public function paint($shape)
        {
            var_dump("黑色的".$shape);
            echo '<br/>';
        }
    }

    (4)Shape.class.php 形状抽象父类(公共设置方法和规范子类实现)

    <?php
    
    namespace Bridge;
    
    abstract class Shape
    {
        protected $color;
    
        public function setColor(Color $color)
        {
            $this->color = $color;
        }
    
        public abstract function draw();
    }

    (5)Circle.class.php(圆形子类)

    <?php
    
    namespace Bridge;
    
    class Circle extends Shape
    {
        public function draw()
        {
            $this->color->paint('圆形');
        }
    }

    (6)Rectangle.class.php(长方形子类)

    <?php
    
    namespace Bridge;
    
    class Rectangle extends Shape
    {
        public function draw()
        {
            $this->color->paint('长方形');
        }
    }

    (7)Square.class.php

    <?php
    
    namespace Bridge;
    
    class Square extends Shape
    {
        public function draw()
        {
            $this->color->paint('正方形');
        }
    }

    (8)brige.php

    <?php
    
    spl_autoload_register(function ($className){
        $className = str_replace('\','/',$className);
        include $className.".class.php";
    });
    
    use BridgeWhite;
    use BridgeSquare;
    use BridgeRectangle;
    
    
    $white = new White();
    $square = new Square();
    $square->setColor($white);
    $square->draw();
    
    
    $rectangle = new Rectangle();
    $rectangle->setColor($white);
    $rectangle->draw();
  • 相关阅读:
    HTML超链接a标签
    ANR与Crash
    学习笔记:oracle学习一:oracle11g体系结构之物理存储结构
    学习笔记:oracle学习一:oracle11g体系结构之服务器结构、数据字典
    关于sql server全文检索的一些资料收集2
    关于sql server全文检索的一些资料收集1
    关于sql server全文检索的一些资料收集2
    做日文编码网页解决乱码的经验。(仇日派别砍我~~)
    如何监视sql server连接池
    做全文检索的小心得
  • 原文地址:https://www.cnblogs.com/zhouqi666/p/9135409.html
Copyright © 2020-2023  润新知