• 桥接模式


    桥梁模式(Bridge)也叫做桥接模式,用于将抽象和实现解耦,使得两者可以独立地变化。桥梁模式完全是为了解决继承的缺点而提出的设计模式。
    系统设计时,发现类的继承有 N 层时,可以考虑使用桥梁模式。使用桥梁模式时主要考虑如何拆分抽象和实现,并不是一涉及继承就要考虑使用该模式。
    在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。

     

     1 <?php
     2 /**
     3  * 我们以汽车制造厂生产汽车为例,Vehicle 是抽象生产类,Motorcycle 和 Car 是具体实现子类,
     4  * 制造汽车分为生产和组装两部分完成,这意味着我们要在制造方法  manufacture 中实现生产和组装工作,
     5  * 这里我们将这一实现过程分离出去成为一个新的接口 Workshop,由该接口的实现类 Produce 和 Assemble 负责具体生产及组装,
     6  * 从而实现抽象(Vehicle)与实现(Workshop)的分离,让两者可以独立变化而不相互影响:
     7  */
     8 
     9 abstract class Vehicle
    10 {
    11     protected $workShop1;
    12     protected $workShop2;
    13 
    14     protected function __construct(Workshop $workShop1, Workshop $workShop2)
    15     {
    16         $this->workShop1 = $workShop1;
    17         $this->workShop2 = $workShop2;
    18     }
    19 
    20     public function manufacture()
    21     {
    22     }
    23 }
    24 
    25 class Motorcycle extends Vehicle
    26 {
    27     public function __construct(Workshop $workShop1, Workshop $workShop2)
    28     {
    29         parent::__construct($workShop1, $workShop2);
    30     }
    31 
    32     public function manufacture()
    33     {
    34         print 'Motorcycle ';
    35         $this->workShop1->work();
    36         $this->workShop2->work();
    37     }
    38 }
    39 
    40 class Car extends Vehicle
    41 {
    42     public function __construct(Workshop $workShop1, Workshop $workShop2)
    43     {
    44         parent::__construct($workShop1, $workShop2);
    45     }
    46 
    47     public function manufacture()
    48     {
    49         print 'Car ';
    50         $this->workShop1->work();
    51         $this->workShop2->work();
    52     }
    53 }
    54 
    55 
    56 
    57 
    58 interface Workshop
    59 {
    60     public function work();
    61 }
    62 
    63 class Produce implements Workshop
    64 {
    65     public function work()
    66     {
    67         print 'Produced ';
    68     }
    69 }
    70 
    71 class Assemble implements Workshop
    72 {
    73     public function work()
    74     {
    75         print 'Assembled';
    76     }
    77 }
    View Code
  • 相关阅读:
    Mac下安装Navicat12之破解
    重新认识spring
    冒泡排序(二)
    算法入门篇(一)
    elasticsearch复杂查询-----2
    idea maven web工程明明添加了maven lib的依赖,但启动web容器时始终报No Class Found?
    idea 多模块项目依赖父工程class找不到问题
    apache-maven-3.3.9集成apache-tomcat-7.0.72实现热部署配置细节
    WebService CXF调试常见报错及解决方案
    通过dbcp链接池对数据库操作报 Cannot create PoolableConnectionFactory (Could not create connection to database server. Attempted reconnect 3 times. Giving up.)--解决方案
  • 原文地址:https://www.cnblogs.com/hangtt/p/6262607.html
Copyright © 2020-2023  润新知