php设计模式中桥接模式有哪些学习心得

  

php设计模式中桥接模式有哪些学习心得?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

,假如你有一个形状类(形状),目前它扩展出了两个子类,圆形类和正方形类。伪代码如下:

界面形状   {   填满()函数;   }      类circleShage实现形状   {   公共函数填充()   {   回声& # 39;圆形& # 39;. PHP_EOL;   }   }      类SquareShape实现形状   {   公共函数填充()   {   回声& # 39;正方形& # 39;. PHP_EOL;   }   }

现在你想给形状增加颜色,红色,蓝色。那么,你应该如何做,如果用继承的思想,那么就需要写出四个类,分别如下:

类RedCircleShage实现形状   {   公共函数填充()   {   回声& # 39;红色圆形& # 39;. PHP_EOL;   }   }      类RedSquareShape实现形状   {   公共函数填充()   {   回声& # 39;红色正方形& # 39;. PHP_EOL;   }   }      类BlueCircleShage实现形状   {   公共函数填充()   {   回声& # 39;蓝色圆形& # 39;. PHP_EOL;   }   }      类BlueSquareShape实现形状   {   公共函数填充()   {   回声& # 39;蓝色正方形& # 39;. PHP_EOL;   }   }

但现在如果我想加入新的形状——三角形,新的颜色——黑色以及白色。那么我们就需要12个子类(类爆炸),那么有没有什么好的办法来解决呢?

<强>

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

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

合成(组合):表示一种整体与部分的关系(强关系),它们具有相同的生命周期,比如人和心脏的关系,心脏是人的一部分。

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

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

<强>

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

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

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

FShape抽象类   {   保护美元颜色=零;   公共函数__construct (IColor颜色美元)   {=$ $ this→颜色颜色;   }   公共函数形状()   {   echo $ this→→颜色()。$ this→setShape ()。PHP_EOL;   }   保护抽象函数setShape ();   }      类CircleShape FShape延伸   {   保护setShape()函数   {   返回& # 39;圆形& # 39;;   }   }      类SquareShape FShape延伸   {   保护setShape()函数   {   返回& # 39;正方形& # 39;;   }   }      接口IColor   {   公共函数颜色();   }      类BlueColor实现IColor   {   公共函数颜色()   {   返回& # 39;蓝色& # 39;;   }   }      类RedColor实现IColor   {   公共函数颜色()   {   返回& # 39;红色& # 39;;   }   }

测试代码如下:

blueColor美元=new blueColor ();   美元redColor=new redColor ();      (blueCircleShape=new CircleShape美元blueColor);   (redCircleShape=new CircleShape美元redColor);   (blueSquareShape=new SquareShape美元blueColor);   (redSquareShape=new SquareShape美元redColor);      美元blueCircleShape→形状();   美元redCircleShape→形状();   美元blueSquareShape→形状();   美元redSquareShape→形状();

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


php设计模式中桥接模式有哪些学习心得