当前位置: 首页 > 后端技术 > PHP

PHP设计模式(八)桥接模式(BridgeForPHP)

时间:2023-03-29 23:18:16 PHP

桥接设计模式桥接模式:将两个原本不相关的类组合起来,然后利用这两个类中的方法和属性输出一个新的结果。案例模拟画笔要求:现在我们需要准备三种粗细(大中小)和五种颜色。如果我们使用蜡笔,我们需要准备3*5=15支蜡笔,也就是说,我们要准备15支特定种类的蜡笔。而如果使用画笔的话,只需要3种画笔,再加上5个颜料盒,3+5=8类就可以实现15支蜡笔的功能。事实上,蜡笔和画笔的主要区别之一是笔和颜色是否可以分开。就是把抽象(Abstraction)和实现(Implementation)解耦,让两者独立变化。”关键在于能不能解耦。因为蜡笔不能把笔和颜色分开,所以这两个自由度笔和颜色是不能分开的。单独改变,这样只需要创建15种对象就可以完成任务。画笔和颜料可以很好的解耦(比例和颜色分离),抽象概念是:“brushpaintswithpaint”,每个参与者(Brushes和paints)都可以在自己的自由度内自由转换。Bridge模式将继承关系转换为组合关系,从而降低系统之间的耦合度,减少代码编写量。模拟企业群发短信需求:企业现在需要按群(临时工、正式工、管理层等)以多种形式(QQ、Email、微博)向员工发送通知,ETC。)。适用类的抽象及其实现应该通过生成子类的方式进行扩展。使用Bridge模式将不同的抽象接口和实现部分组合起来,分别进行扩展。不希望一个抽象和它的实现部分有固定的绑定关系。一个组件有多个抽象,系统需要它们之间动态耦合。Bridge模式利用“对象之间的组合关系”,将抽象与实现之间固有的绑定关系解耦,使抽象与实现可以按照各自的维度进行变化。所谓抽象和实现沿着各自的维度变化,也就是对它们进行“子类化”。每个子类获取后可以任意取值,从而获取不同的员工群体和不同的信息传递方式。Bridge模式的应用一般是在“两个非常强的变化维度”,有时即使有两个维度的变化,某个方向的维度变化并不剧烈——也就是说,两个变化不会导致纵横交错的结果,没有必要使用Bridge模式。实现员工分组}}classVipStaffextendsStaff{publicfunctionstaffData(){return'小星,小龙';}}发送表单//抽象父类abstractclassSendType{abstractpublicfunctionsend($to,$content);}classQQSendextendsSendType{publicfunction__construct(){//与QQ接口连接方法}publicfunctionsend($到,$content){返回$content。'(至'.$至.'来自QQ)
';}}classSendInfo{protected$_level;受保护的$_method;publicfunction__construct($level,$method){//这里可以使用单例来控制资源消耗$this->_level=$level;$this->_method=$method;}publicfunctionsending($content){$staffArr=$this->_level->staffData();$result=$this->_method->send($staffArr,$content);回声$结果;}}客户端调用$info=newSendInfo(newVipStaff(),newQQSend());$info->sending('回家吃饭');$info=newSendInfo(newCommonStaff(),newQQSend());$info->sending('继续工作');输出结果回家吃饭(ToXiaoxing,XiaolongFromQQ)继续工作(ToXiaoming,Xiaohong,XiaoheiFromQQ)总结从上面我们可以看出,如果我们加组或者直接创建一个类就可以了扩大发送信息的种类,非常方便。然而,Bridge模式虽然是一种非常好用的模式,但它也非常复杂。它符合开闭原则,更喜欢使用对象而不是继承。这两个面向对象原则。