PHP中桥接模式详解如何应用?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1158个文字,预计阅读时间需要5分钟。
目录简介适用场景优点缺点扩展案例代码抽象代码简介桥梁模式(Bridge Pattern)是一种结构型设计模式,旨在将抽象与其实现分离,使它们可以独立变化。
适用场景- 当需要将抽象与其实现分离,且两者都需要独立变化时。- 当抽象和实现不固定,需要动态组合时。- 当抽象和实现之间的层次结构复杂时。
优点- 提高系统的灵活性,降低抽象和实现之间的耦合。- 允许抽象和实现独立变化,易于扩展和维护。
缺点- 增加了系统的复杂性,需要更多的类和对象。- 可能会增加系统的学习成本。
扩展- 可以通过组合多个桥梁来创建更复杂的系统结构。
案例代码pythonclass Abstraction: def __init__(self, implementor): self._implementor=implementor
def operation(self): return fAbstraction: Operation with {self._implementor.operation()}
class Implementor: def operation(self): return Implementor: Operation
使用abstraction=Abstraction(Implementor())print(abstraction.operation())
抽象代码pythonclass Bridge: def operation(self): pass
class RefinedAbstraction(Bridge): def __init__(self, implementor): super().__init__() self._implementor=implementor
def operation(self): return fRefinedAbstraction: Operation with {self._implementor.operation()}
class ConcreteImplementor(Bridge): def operation(self): return ConcreteImplementor: Operation
目录
- 简介
- 适用场景
- 优点
- 缺点
- 扩展
- 案例代码
- 抽象代码
简介
桥接模式又叫桥梁模式,属于结构型模式。目的是将抽象与实现分离,使它们都可以独立的变化,解耦。继承有很多好处,但是会增加耦合,而桥接模式偏向组合和聚合的方式来共享。
适用场景
不希望或不适用使用多继承的场景。
一个类存在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桥接模式内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!
本文共计1158个文字,预计阅读时间需要5分钟。
目录简介适用场景优点缺点扩展案例代码抽象代码简介桥梁模式(Bridge Pattern)是一种结构型设计模式,旨在将抽象与其实现分离,使它们可以独立变化。
适用场景- 当需要将抽象与其实现分离,且两者都需要独立变化时。- 当抽象和实现不固定,需要动态组合时。- 当抽象和实现之间的层次结构复杂时。
优点- 提高系统的灵活性,降低抽象和实现之间的耦合。- 允许抽象和实现独立变化,易于扩展和维护。
缺点- 增加了系统的复杂性,需要更多的类和对象。- 可能会增加系统的学习成本。
扩展- 可以通过组合多个桥梁来创建更复杂的系统结构。
案例代码pythonclass Abstraction: def __init__(self, implementor): self._implementor=implementor
def operation(self): return fAbstraction: Operation with {self._implementor.operation()}
class Implementor: def operation(self): return Implementor: Operation
使用abstraction=Abstraction(Implementor())print(abstraction.operation())
抽象代码pythonclass Bridge: def operation(self): pass
class RefinedAbstraction(Bridge): def __init__(self, implementor): super().__init__() self._implementor=implementor
def operation(self): return fRefinedAbstraction: Operation with {self._implementor.operation()}
class ConcreteImplementor(Bridge): def operation(self): return ConcreteImplementor: Operation
目录
- 简介
- 适用场景
- 优点
- 缺点
- 扩展
- 案例代码
- 抽象代码
简介
桥接模式又叫桥梁模式,属于结构型模式。目的是将抽象与实现分离,使它们都可以独立的变化,解耦。继承有很多好处,但是会增加耦合,而桥接模式偏向组合和聚合的方式来共享。
适用场景
不希望或不适用使用多继承的场景。
一个类存在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桥接模式内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

