设计模式之桥接模式(php实现)
github地址:https://github.com/ZQCard/design_pattern
/**
* 桥接模式
* 优点:
* 1、分离抽象接口及其实现部分。提高了比继承更好的解决方案。
* 2、桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。
* 3、实现细节对客户透明,可以对用户隐藏实现细节。
* 缺点:
* 1、桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
* 2、桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性。
*
* 例子: 形状和颜色 各种颜色的形状进行组合,如果进行多层继承,添加一个颜色或者形状会增加很多类
*/
(1) Color.class.php(颜色接口,用户规范子类实现)
<?php namespace Bridge; interface Color
{
public function paint($shape);
}
(2)Gray.class.php(灰色子类)
<?php namespace Bridge; class Gray implements Color
{
public function paint($shape)
{
var_dump("灰色的".$shape);
echo '<br/>';
}
}
(3)Black.class.php(黑色子类)
<?php namespace Bridge; class Black implements Color
{
public function paint($shape)
{
var_dump("黑色的".$shape);
echo '<br/>';
}
}
(4)Shape.class.php 形状抽象父类(公共设置方法和规范子类实现)
<?php namespace Bridge; abstract class Shape
{
protected $color; public function setColor(Color $color)
{
$this->color = $color;
} public abstract function draw();
}
(5)Circle.class.php(圆形子类)
<?php namespace Bridge; class Circle extends Shape
{
public function draw()
{
$this->color->paint('圆形');
}
}
(6)Rectangle.class.php(长方形子类)
<?php namespace Bridge; class Rectangle extends Shape
{
public function draw()
{
$this->color->paint('长方形');
}
}
(7)Square.class.php
<?php namespace Bridge; class Square extends Shape
{
public function draw()
{
$this->color->paint('正方形');
}
}
(8)brige.php
<?php
spl_autoload_register(function ($className){
$className = str_replace('\\','/',$className);
include $className.".class.php";
});
use Bridge\White;
use Bridge\Square;
use Bridge\Rectangle;
$white = new White();
$square = new Square();
$square->setColor($white);
$square->draw();
$rectangle = new Rectangle();
$rectangle->setColor($white);
$rectangle->draw();
设计模式之桥接模式(php实现)的更多相关文章
- 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)
原文:乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) 作者:webabcd 介绍 ...
- java面试题之----jdbc中使用的设计模式(桥接模式)
1.JDBC(JavaDatabase Connectivity) JDBC是以统一方式访问数据库的API. 它提供了独立于平台的数据库访问,也就是说,有了JDBC API,我们就不必为访问Oracl ...
- php设计模式之桥接模式
php设计模式之桥接模式 一.概述 桥接模式:将两个原本不相关的类结合在一起,然后利用两个类中的方法和属性,输出一份新的结果. 其实就是讲不相关的东西通过类(本例中是SendInfo)结合在一起,从而 ...
- java设计模式7——桥接模式
java设计模式7--桥接模式 1.桥接模式介绍 桥接模式是将抽象部分与它的实现部分分离,使他们都可以独立的变化.它是一种对象结构型模式,又称为柄体模式或接口模式. 2.解决问题 2.1.将复杂的组合 ...
- C++设计模式-Bridge桥接模式
作用:将抽象部份与它的实现部份分离,使它们都可以独立地变化. 将抽象(Abstraction)与实现(Implementation)分离,使得二者可以独立地变化. 桥接模式号称设计模式中最难理解的模式 ...
- 设计模式之桥接模式(Bridge)
注:本文不属于原创,而是根据原文重新整理,原文是:我给媳妇解释设计模式:第一部分 设计模式不是基于理论发明的.相反,总是先有问题场景,再基于需求和情景不断演化设计方案,最后把一些方案标准化成“模式”. ...
- 【GOF23设计模式】桥接模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_桥接模式.多层继承结构.银行日志管理.管理系统消息管理.人力资源的奖金计算 未用桥接模式: package com.te ...
- js设计模式(3)---桥接模式
0.前言 看设计模式比较痛苦,一则是自己经验尚浅,不能体会到使用这些设计模式的益处:二则是不能很好把握使用这些设计模式的时机.所以这一部分看得断断续续,拖拖拉拉,为了了却这快心病,决定最近一口气看完几 ...
- [设计模式] 7 桥接模式 bridge
#include<iostream> using namespace std; class AbstractionImp { public: virtual ~AbstractionImp ...
- java设计模式之桥接模式
桥接模式 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化.这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦.这种模式涉及到一个作为桥接的 ...
随机推荐
- gulp入门1
1. 下载.安装git(https://git-scm.com/downloads),学会使用命令行. 2. 下载.安装node.js(https://nodejs.org/en/),现在node.j ...
- intellij idea导入不了java.util.Date解决办法
可以在Settings -> Editor -> General -> Auto Import,将Exclude中的java.util.Date删除.
- Spring bean 创建过程源码解析
在上一篇文件 Spring 中 bean 注册的源码解析 中分析了 Spring 中 bean 的注册过程,就是把配置文件中配置的 bean 的信息加载到内存中,以 BeanDefinition 对象 ...
- HDU2669 Romantic
Description The Sky is Sprite. The Birds is Fly in the Sky. The Wind is Wonderful. Blew Throw the Tr ...
- 在cocos2d中实现真正意思上的图片放大和缩小
http://www.cnblogs.com/dinghing154/archive/2012/08/05/2623970.html 在编写程序的时候我们常常使用self.scale来让我们使用的图片 ...
- linux资源限制函数getrlimit,setrlimit(转载)【转】
转自:http://blog.csdn.net/stormkey/article/details/5890512 版权声明:本文为博主原创文章,未经博主允许不得转载. getrlimit,setrli ...
- UVA 306 Cipher
题意 :lucky cat里有翻译.英文也比较好懂. 很容易发现有周期然后就拍就好了 注意每组数据后边都有空行 包括最后一组.一开始以为最后一组没有空行.唉.. #include <map> ...
- unicode和utf8之间的关系
,字符编码是计算机技术的基石,想要熟练使用计算机,懂得一点字符编码的知识,还是很有必要的. 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit ...
- 基于UDP高性能传输协议UDT doc翻译(一)
原文转自:http://hi.baidu.com/doodlezone/item/74a203155efe26dbbf9042dd UDT文档阅读理解 一. 概述 ...
- Kubernetes网络配置
#flannel#所有node都安装#下载https://github.com/coreos/flannel/releases#解压并把flanneld和mk-codker-opts.sh复制到/us ...