搜索

查看: 3044|回复: 11

[PHP] 详解PHP设计模式之桥接模式

[复制链接]
发表于 2023-5-4 17:06:08 | 显示全部楼层 |阅读模式
Editor 2023-5-4 17:06:08 3044 11 看全部
目录
  • 简介
  • 适用场景
  • 优点
  • 缺点
  • 扩展
  • 案例代码
  • 抽象代码
    简介
    桥接模式又叫桥梁模式,属于结构型模式。目的是将抽象与实现分离,使它们都可以独立的变化,解耦。继承有很多好处,但是会增加耦合,而桥接模式偏向组合和聚合的方式来共享。

    适用场景
    不希望或不适用使用多继承的场景。
    一个类存在2个或更多的 独立变化维度 , 并且这些维度都需要 独立扩展

    优点
    解耦抽象和具体实现,方便增加抽象和实现。优秀的扩充能力
    符合开闭原则和合成复用原则。

    缺点
    增加了系统的理解与设计难度。
    需要正确地识别出系统中,两个独立变化的维度。

    扩展
    为什么要用桥接模式?
    先说说继承:
    如果有一个手机类作为父类A,下面有各个牌子的手机作为子类B,又有每个牌子手机旗下的内置应用类C。此时如果有3个手机的牌子,那么内置应用的父类可能有30个。
    如果因为需求变需要增加手机品牌B,或者接着有第四层的D类继承第三层的内置应用类,想想这个是多么庞大的数量。后期难以维护。如果一旦父级发生变动,株连很多子类。
    其实按照合成复用原则,也就是少用继承(强耦合),多用组合(弱耦合)或者聚合(中耦合)
    以上的问题,可以直接拆分成两个大模块:
    手机类作为抽象,手机牌子作为具体的类。
    内置软件可单独抽象,每一个内置的软件作为具体的类。
    然后让让两个抽象进行牵线搭桥,这边是桥接模式的思路。

    案例代码
    abstract class Mobile {
        abstract public function operate();
    }
    class HuaWei extends Mobile {
        public function operate() {
            echo '华为手机';
        }
    }
    class Vivo extends Mobile {
        public function operate() {
            echo 'Vivo手机';
        }
    }
    Abstract class Abstraction {
        protected $implementer;
        public function setImplementer ($implementer) {
            $this->implementer = $implementer;
        }
        public function run() {
            $this->implementer->operate();
        }
    }
    class HuaWeiApp extends Abstraction {
        public function run() {
            $this->implementer->operate();
        }
    }
    class VivoApp extends Abstraction {
        public function run() {
            $this->implementer->operate();
        }
    }
    //调用端
    $ab = new HuaWeiApp();
    $ab->setImplementer(new HuaWei);
    $ab->run();
    $ab = new VivoApp();
    $ab->setImplementer(new Vivo);
    $ab->run();
    抽象代码
    //创建一个实现
    abstract class Implementer {
        abstract public function operate();
    }
    class ImplementerA extends Implementer {
        public function operate() {
            echo 'ImplementerA';
        }
    }
    class ImplementerB extends Implementer {
        public function operate() {
            echo 'ImplementerB';
        }
    }
    Abstract class Abstraction {
        protected $implementer;
        //用组合的方式替代继承
        public function setImplementer (Implementer $implementer) {
            $this->implementer = $implementer;
        }
        public function run() {
            $this->implementer->operate();
        }
    }
    class RefinedAbstraction extends Abstraction {
        public function run() {
            $this->implementer->operate();
        }
    }
    //调用端============================================================
    $ab = new RefinedAbstraction();
    $ab->setImplementer(new ImplementerA());
    $ab->run();
    $ab->setImplementer(new ImplementerB());
    $ab->run();
    到此这篇关于详解PHP设计模式之桥接模式的文章就介绍到这了,更多相关PHP桥接模式内容请搜索知鸟论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持知鸟论坛
  • 知鸟论坛永久地址发布页:www.zn60.me
    回复

    使用道具 举报

    发表于 2023-6-28 20:46:02 | 显示全部楼层
    小妖花满楼满fx 2023-6-28 20:46:02 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
    知鸟论坛永久地址发布页:www.zn60.me
    回复

    使用道具 举报

    发表于 2023-6-29 01:09:24 | 显示全部楼层
    dxf17 2023-6-29 01:09:24 看全部
    楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
    知鸟论坛永久地址发布页:www.zn60.me
    回复

    使用道具 举报

    发表于 2023-6-29 14:13:50 | 显示全部楼层
    462710480 2023-6-29 14:13:50 看全部
    楼主,大恩不言谢了!知鸟论坛是最棒的!
    知鸟论坛永久地址发布页:www.zn60.me
    回复

    使用道具 举报

    发表于 2023-6-29 16:16:33 | 显示全部楼层
    123456868 2023-6-29 16:16:33 看全部
    这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
    知鸟论坛永久地址发布页:www.zn60.me
    回复

    使用道具 举报

    发表于 2023-6-29 18:28:49 | 显示全部楼层
    落败的青春阳落s 2023-6-29 18:28:49 看全部
    楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
    知鸟论坛永久地址发布页:www.zn60.me
    回复

    使用道具 举报

    发表于 2023-6-29 20:12:44 | 显示全部楼层
    贺老师 2023-6-29 20:12:44 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    知鸟论坛永久地址发布页:www.zn60.me
    回复

    使用道具 举报

    发表于 2023-6-29 22:34:24 | 显示全部楼层
    ffycxyw2274436 2023-6-29 22:34:24 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    知鸟论坛永久地址发布页:www.zn60.me
    回复

    使用道具 举报

    发表于 2023-6-30 00:08:21 | 显示全部楼层
    尘埃416 2023-6-30 00:08:21 看全部
    楼主,大恩不言谢了!知鸟论坛是最棒的!
    知鸟论坛永久地址发布页:www.zn60.me
    回复

    使用道具 举报

    发表于 2023-6-30 02:10:03 | 显示全部楼层
    永远就三年疗 2023-6-30 02:10:03 看全部
    我看不错噢 谢谢楼主!知鸟论坛越来越好!
    知鸟论坛永久地址发布页:www.zn60.me
    回复

    使用道具 举报

    • 您可能感兴趣
    点击右侧快捷回复 【请勿灌水】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| SiteMap| 小黑屋| 赞兔论坛
    联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表