码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之结构型模式—— 2.2 桥接模式

时间:2015-02-17 23:41:40      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:设计模式 桥接模式

<?php

	/**
	 * 2.2 桥接模式
	 * 定义:
	 * 		将抽象部分与它的实现部分分离,使它
	 * 		们都可以独立的变化。
	 * 此模式包含四种角色:
	 * 		1. 抽象被聚合角色
	 *   		职责:它是被包含的类,也就是说
	 *   			  此类的对象可以被作为另外
	 *   			  一个类的一部分,但是这一
	 *   			  部分不是非必需的。它依赖
	 *   			  与平台。
	 * 		2. 具体被聚合角色
	 * 			职责:抽象被聚合的具体实现。
	 * 		3. 抽象聚合角色
	 *   		职责:它扮演的是包含容纳的一个
	 *   			  角色。可以把它理解为一个
	 *   			  平台。比如淘宝,你可以在
	 *   			  上面开店,也可以不开店.
	 *   			  能不能开店是由这个平台的
	 *   			  功能来决定的。
	 * 		4. 具体聚合角色
	 *   		职责:对抽象聚合类的具体实现。
	 *
	 * 优点:
	 * 		1. 分离了抽象和实现部分
	 * 		2. 扩展性更好
	 * 		3. 可动态切换实现
	 * 		4. 可减少子类的个数
	 * 缺点:
	 * 使用场景:
	 * 		1. 当一个对象有多个变化因素的时候
	 * 		   ,通过抽象这些变化因素,将依赖
	 * 		   修改为抽象依赖;
	 * 		2. 当某个变化因素在多个对象中共享
	 * 		   时,我们可以抽象出这个变化因素,
	 * 		   然后实现这些不同的变化因素。
	 * 		3. 当我们期望一个对象的多个变化因
	 * 		   素可以动态的变化,而且不影响客
	 * 		   户的程序的使用时。		
	 */


	/**
	 * 以手机品牌和软件的方式举例
	 */
	//手机软件——抽象被聚合角色
	abstract class Soft{
		abstract public function run();
	}

	//具体的手机软件,游戏——具体具体被聚合角色
	class Game extends Soft{
		public function run(){
			echo ‘运行手机游戏‘;
		}
	}

	//具体手机软件,通讯录
	class AddressList extends Soft{
		public function run(){
			echo ‘运行手机通讯录‘;
		}
	}

	//手机品牌——抽象聚合角色或称抽象平台角色
	abstract class Brand{

		abstract public function run(Soft $soft);
	}

	//具体手机品牌
	class Huawei extends Brand{
		public function run(Soft $soft){
			$soft->run();
		}
	}
	class Apple extends Brand{
		public function run(Soft $soft){
			$soft->run();
		}
	}


	$hw=new Huawei();
	$hw->run(new Game());
	$hw->run(new AddressList());


?>


本文出自 “一切皆有可能” 博客,请务必保留此出处http://noican.blog.51cto.com/4081966/1614775

设计模式之结构型模式—— 2.2 桥接模式

标签:设计模式 桥接模式

原文地址:http://noican.blog.51cto.com/4081966/1614775

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!