全网整合营销服务商

营销型网站+SEO优化+关键词快排=一站式服务

免费咨询热线:15959292472

[重庆市seo网络公司]php设计模式:桥接模式学习心得(附案例代码)

  假如你有一个形状类(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个子类(类爆炸),那么有没有什么好的办法来解决呢?

  合成(组合)与聚合

  解决上述问题前,我们想理解合成与聚合的含义。

  合成聚合原则:尽量使用合成/聚合,尽量不要使用继承。

  合成(组合):表示一种整体与部分的关系(强关系),[重庆市seo网络公司]它们具有相同的生命周期,比如人和心脏的关系,心脏是人的一部分。

  聚合:表示一种整体与部分的关系(弱关系),表示A对象可以包含B对象,但B对象并不是A对象的一部分。比如,我们上面所说的形状和颜色,形状可以包含颜色,但颜色并不是形状的一部分。

  桥接模式,就是使用聚合来对系统进行解耦的。

  桥接模式

  定义:将抽象部分与它的实现分离,使他们可以独立的变化

  上面的定义很难理解,用我们上面的例子就是,一个系统可能有多个角度分类(颜色、形状),php教程每一种分类都可能有变化(新增新的形状和颜色),那么我们就可以用多个角度将系统的实现分离出来,降低他们之间的耦合。

  那么如何来实现呢?下面是实现代码:

  

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();

 

  使用桥接模式后,我们的代码就符合了“开闭原则”, 当有新的形状或颜色加入时,我们只需要添加新的类即可。而不用去修改之前的类。

  

 

  学习推荐:
 

  php视频教程

  mysql视频教程
 

  

 

  以上就是php设计模式:桥接模式学习心得(附案例代码)的详细内容,更多请关注久澳传媒编程栏目其它相关文章!

[重庆市seo网络公司]php设计模式:桥接模式学习心得(附案例代码)

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。