Karp 的技术博客

概述

桥接模式是一种结构型设计模式,它将抽象部分和实现部分分离,使它们可以独立变化。通过桥接模式,可以将抽象部分和实现部分进行组合,而不是继承关系,从而使系统更加灵活。

适用场景

桥接模式适用于以下情况:

  • 当一个类存在多个维度的变化,且这些维度可以独立变化时。
  • 当希望在抽象部分和实现部分之间建立一个稳定的关联关系,而不希望二者紧密耦合时。
  • 当希望在运行时动态地切换抽象部分和实现部分的时候。

结构

桥接模式由以下组件组成:

  • 抽象类(Abstraction):抽象类定义了抽象部分的接口,并维护一个指向实现部分的引用。
  • 扩展抽象类(RefinedAbstraction):扩展抽象类继承自抽象类,扩展了抽象部分的功能。
  • 实现接口(Implementor):实现接口定义了实现部分的接口。
  • 具体实现类(ConcreteImplementor):具体实现类实现了实现接口,提供具体的实现。

示例

<?php

// 抽象类
abstract class Vehicle
{
    protected $implementor;

    public function __construct(Workshop $implementor)
    {
        $this->implementor = $implementor;
    }

    abstract public function manufacture();
}

// 扩展抽象类
class Car extends Vehicle
{
    public function manufacture()
    {
        echo "Car ";
        $this->implementor->work();
    }
}

class Bike extends Vehicle
{
    public function manufacture()
    {
        echo "Bike ";
        $this->implementor->work();
    }
}

// 实现接口
interface Workshop
{
    public function work();
}

// 具体实现类
class Produce implements Workshop
{
    public function work()
    {
        echo "produced";
    }
}

class Assemble implements Workshop
{
    public function work()
    {
        echo "assembled";
    }
}

// 客户端代码
$car = new Car(new Produce());
$car->manufacture(); // Output: Car produced

$bike = new Bike(new Assemble());
$bike->manufacture(); // Output: Bike assembled

在上面的示例中,我们给出了一个桥接模式的示例实现。其中,抽象类(Vehicle)定义了抽象部分的接口,并维护一个指向实现部分的引用。扩展抽象类(Car和Bike)继承自抽象类,并扩展了抽象部分的功能。实现接口(Workshop)定义了实现部分的接口,具体实现类(Produce和Assemble)实现了实现接口,提供具体的实现。

通过使用桥接模式,我们可以将抽象部分和实现部分独立变化,通过组合的方式将它们进行连接。这样一来,当抽象部分或实现部分发生变化时,它们可以独立变化,而不会相互影响。

php 设计模式

版权属于:karp
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
更新于: 2015年12月30日 04:22
8

目录

来自 《PHP设计模式:桥接模式》
774 文章数
0 评论量
9 分类数
779 页面数
已在风雨中度过 9年277天3小时29分