将抽象部分与它的实现部分分离,使他们都可以独立的变化
具有依赖继承管的对象,可以灵活的进行随意组合,将抽象与实现解耦
使用组合/聚合的方式来共享一些能用的方法,php 的trait
角色:
Abstraction:定义抽象接口,接口有用一个实现类Implementor的对象引用
RefinedAbstraction: 抽象接口的继承扩展类,调用Implementor 的方法,自己也可以修改
Implementor:实现类接口,提供方法,RefinedAbstraction进行调用,
ConcreteImplementor:Implementor实现类的具体实现,
桥接模式,将抽象,实现分离,自由组合,都可独立变化
<?php
/**
* 一个实现类接口
*/
interface Implementor
{
public function shixian();
}
/**
* 实现类接口的具体实现A
*/
class concreateA implements Implementor
{
public function shixian()
{
echo '实现愿望1';
}
}
/**
* 实现类接口的具体实现B
*/
class concreateB implements Implementor
{
public function shixian()
{
echo '实现愿望2';
}
}
/**
* 定义抽象接口,包含实现类的引用
*/
abstract class Abstraction
{
protected $imp;
public function AbstractCityArea($obj){
$this->imp=$obj;
}
abstract public function chouxiang();
}
/**
* 抽象继承类
*/
class RefinedAbstraction extends Abstraction
{
public function chouxiang(){
$this->imp->shixian();
}
}
//操作
//new 实现类
$concreateA= new concreateA();
$concreateB= new concreateB();
//new 抽象继承类
$RefinedAbstraction= new RefinedAbstraction();
$RefinedAbstraction->AbstractCityArea($concreateB);
$RefinedAbstraction->chouxiang();
1.桥接模式使用对象间的组合方式关系解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来来变化,
2.虽未抽象和实现沿着各自维度的变化,即子类化他们,得到各个子类之后,便可以任选他们,从而获得不同路上的不同其次,
3.桥接模式有时候类似于多继承,但是多继承方法往往违背了SRP原则,复用性较差,桥接模式是比继承方案更好的解决方法