zoukankan      html  css  js  c++  java
  • php实现设计模式之 桥接模式

    <?php
    /** 桥接模式:将抽象部分与实现部分分离,使它们都可以独立的变化。
     * 
     * 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,桥接模式就是应对这种多维度的变化
     */
    
    
    
    //例子:车在路上行驶,速度可变。三个维度:路、车、速度。2*2*2=8中情况
    //抽象出路,车,速度,分别实现。其中路作为最底层,包含车和速度实例。(也可以把速度放到车里面,车放到路里面)
    
    //很灵活的组合,比如说有的需要三个维度,那么三个全用上即可,有的不需要三个维度,那就去掉不要的维度(车快速的行驶,不需要路)
    interface Road{
    	public function run();
    }
    
    class Street implements Road{
    	public $car;
    	public $speed;
    	public function __construct($car,$speed){
    		$this->car = $car;
    		$this->speed = $speed;
    	}
    	
    	public function run(){
    		echo $this->car->run();
    		echo $this->speed->showSpeed();
    		echo '行驶在普通街道上';
    	}
    }
    
    class Freeway implements Road{
    	public $car;
    	public $speed;
    	public function __construct($car,$speed){
    		$this->car = $car;
    		$this->speed = $speed;
    	}
    	
    	public function run(){
    		echo $this->car->run();
    		echo $this->speed->showSpeed();
    		echo '行驶在高速公路上';
    	}
    }
    
    interface Car{
    	public function run();
    }
    
    class Jeep implements Car{
    	public function run(){
    		echo '吉普车';
    	}
    }
    
    class Bus implements Car{
    	public function run(){
    		echo '公共汽车';
    	}
    }
    
    interface Speed{
    	public function showSpeed();
    }
    
    class Quick implements Speed{
    	public function showSpeed(){
    		echo '快速';
    	}
    }
    
    class Slow implements Speed{
    	public function showSpeed(){
    		echo '缓慢';
    	}
    }
    
    class Client{
    	public static function main(){
    		$car = new Jeep();
    		$speed = new Quick();
    		$road = new Freeway($car,$speed);
    		$road->run();
    	}
    }
    
    Client::main();
    ?>
    

      UML类图如下:

  • 相关阅读:
    NBIbatis 微信框架
    NBIbatis 框架体系说明
    NBIbatis 基础框架
    .NET开发者必备的工具箱
    开源中国上一些有用的开源系统
    TfS+强制删除签出锁定项
    thinkphp支持大小写url地址访问,不产生下划线
    sqlserver 链接 ODBC 访问 MySql
    ibatis + log4net 配置注意事项
    Devexpress GridView内嵌dx:ASPxGridLookup取得控件值乱跳解决方案
  • 原文地址:https://www.cnblogs.com/taijun/p/4075736.html
Copyright © 2011-2022 走看看