PHP设计模式-桥接 发表于 2017-03-09 | 分类于 PHP | 评论数: | 阅读次数: 本文字数: 1.8k | 阅读时长 ≈ 2 分钟 适用性 基础的结构型设计模式:将抽象和实现解耦,对抽象的实现是实体行为对接口的实现。 例如:人 => 抽象为属性:性别 动作:吃 => 人吃的动作抽象为interface => 实现不同的吃法。 UML 代码示例123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111/** * 人抽象类 */abstract class PersonAbstract{ /** * 性别 * @var string */ protected $_gender = ''; /** * 使用的吃饭工具 * @var string */ protected $_tool = ''; /** * 构造函数 * * @param string $gender 性别 * @param EatInterface $tool [description] */ public function __construct($gender='',EatInterface $tool) { $this->_gender = $gender; $this->_tool = $tool; } /** * 吃的行为 * * @param string $food 实物 * @return void */ abstract public function eat($food='');}/** * 男人实类 */class PersonMale extends PersonAbstract{ /** * 吃的具体方式 * * @param string $food 食物 * @return string */ public function eat($food='') { $this->_tool->eat($food); }}/** * 吃接口 */interface EatInterface{ /** * 吃 * * @param string $food 食物 * @return mixed */ public function eat($food='');}/** * 用叉子吃实体 */class EatByFork implements EatInterface{ /** * 吃 * * @param string $food 食物 * @return string */ public function eat($food='') { echo "用叉子吃{$food}~"; }}/** * 用筷子吃实体 */class EatByChopsticks implements EatInterface{ /** * 吃 * * @param string $food 食物 * @return string */ public function eat($food='') { echo "用筷子吃{$food}~"; }}try { // 初始化一个用筷子吃饭的男人的实例 $male = new PersonMale('male', new EatByChopsticks()); // 吃饭 $male->eat('大米');} catch (Exception $e) { echo $e->getMessage();}