php设计模式:桥接模式学习心得(附案例代码)
发布:smiling 来源: PHP粉丝网 添加日期:2022-07-20 16:56:27 浏览: 评论:0
假如你有一个形状类(Shape),目前它扩展出了两个子类,圆形类和正方形类。伪代码如下:
- interface Shape
- {
- function fill ();
- }
- class circleShage implements Shape
- {
- public function fill ()
- {
- echo '圆形' . PHP_EOL;
- }
- }
- class SquareShape implements Shape
- {
- public function fill ()
- {
- echo '正方形' . PHP_EOL;
- }
- }
现在你想给形状增加颜色——红色、蓝色。那么,你应该如何做,如果用继承的思想,那么就需要写出四个类,分别如下:
- class RedCircleShage implements Shape
- {
- public function fill ()
- {
- echo '红色圆形' . PHP_EOL;
- }
- }
- class RedSquareShape implements Shape
- {
- public function fill ()
- {
- echo '红色正方形' . PHP_EOL;
- }
- }
- class BlueCircleShage implements Shape
- {
- public function fill ()
- {
- echo '蓝色圆形' . PHP_EOL;
- }
- }
- class BlueSquareShape implements Shape
- {
- public function fill ()
- {
- echo '蓝色正方形' . PHP_EOL;
- }
- }
但现在如果我想加入新的形状——三角形,新的颜色——黑色以及白色。那么我们就需要12个子类(类爆炸),那么有没有什么好的办法来解决呢?
合成(组合)与聚合
解决上述问题前,我们想理解合成与聚合的含义。
合成聚合原则:尽量使用合成/聚合,尽量不要使用继承。
合成(组合):表示一种整体与部分的关系(强关系),它们具有相同的生命周期,比如人和心脏的关系,心脏是人的一部分。
聚合:表示一种整体与部分的关系(弱关系),表示A对象可以包含B对象,但B对象并不是A对象的一部分。比如,我们上面所说的形状和颜色,形状可以包含颜色,但颜色并不是形状的一部分。
桥接模式,就是使用聚合来对系统进行解耦的。
桥接模式
定义:将抽象部分与它的实现分离,使他们可以独立的变化
上面的定义很难理解,用我们上面的例子就是,一个系统可能有多个角度分类(颜色、形状),每一种分类都可能有变化(新增新的形状和颜色),那么我们就可以用多个角度将系统的实现分离出来,降低他们之间的耦合。
那么如何来实现呢?下面是实现代码:
- abstract class FShape
- {
- protected $color = null;
- public function __construct(IColor $color)
- {
- $this->color = $color;
- }
- public function shape ()
- {
- echo $this->color->color() . $this->setShape() . PHP_EOL;
- }
- protected abstract function setShape ();
- }
- class CircleShape extends FShape
- {
- protected function setShape ()
- {
- return '圆形';
- }
- }
- class SquareShape extends FShape
- {
- protected function setShape ()
- {
- return '正方形';
- }
- }
- interface IColor
- {
- public function color ();
- }
- class BlueColor implements IColor
- {
- public function color ()
- {
- return '蓝色';
- }
- }
- class RedColor implements IColor
- {
- public function color ()
- {
- return '红色';
- }
- }
测试代码如下:
- $blueColor = new BlueColor();
- $redColor = new RedColor();
- $blueCircleShape = new CircleShape($blueColor);
- $redCircleShape = new CircleShape($redColor);
- $blueSquareShape = new SquareShape($blueColor);
- $redSquareShape = new SquareShape($redColor);
- $blueCircleShape->shape();
- $redCircleShape->shape();
- $blueSquareShape->shape();
- $redSquareShape->shape();
使用桥接模式后,我们的代码就符合了“开闭原则”, 当有新的形状或颜色加入时,我们只需要添加新的类即可。而不用去修改之前的类。
Tags: php设计模式 php桥接模式
- 上一篇:详解PHP网页缓存技术优点及代码实例
- 下一篇:最后一页
相关文章
- ·php设计模式——单例模式(Singleton)的常见应用场景(2015-04-15)
- ·php 设计模式之单例模式例子(2016-07-27)
- ·PHP设计模式之:单例模式的学习笔记(2016-07-29)
- ·PHP设计模式之:注册模式入门教程(2016-07-29)
- ·PHP设计模式之:适配器模式入门教程(2016-07-29)
- ·PHP设计模式之:数据映射模式教程(2016-07-29)
- ·PHP设计模式之:观察者模式学习笔记(2016-07-29)
- ·PHP常用设计模式之委托设计模式(2021-07-09)
- ·php设计模式之委托模式(2021-07-09)
- ·PHP设计模式之观察者模式实例(2021-07-10)
- ·PHP设计模式之模板方法模式定义与用法详解(2021-09-06)
- ·PHP设计模式之状态模式定义与用法详解(2021-09-06)
- ·PHP设计模式之装饰器模式定义与用法详解(2021-09-06)
- ·PHP设计模式之适配器模式定义与用法详解(2021-09-06)
- ·PHP设计模式之原型模式定义与用法详解(2021-09-06)
- ·PHP设计模式之工厂模式定义与用法详解(2021-09-06)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)