本文为datawhale2022年12月组队学习《大话设计模式》task6打卡学习。
【教程地址】https://github.com/datawhalechina/sweetalk-design-pattern
桥接模式(Bridge Pattern)
又称为柄体(Handle and Body)模式或接口(Interfce)模式,是将抽象部分与其实现部分分离,使它们都可以独立地变化。
有不同品牌的手机,同时这些手机上还要安装不同的应用软件,考虑在需要不断增加软件的情况下,如果设计相应的抽象类。
需要注意对于不同品牌的手机,软件基本无法兼容。因此如果手机需要增加软件,就需要针对不同品牌的手机分别实现软件功能。
实现该问题的程序通常会采用继承方式设计,那么父类和子类之间会具有非常紧密的依赖关系,父类中的任何变化都会影响子类,子类继承的实现如果无法解决新需求就必须重写或替换父类。如此设计会导致类爆炸问题,并且扩展不灵活。
1.2.2 问题解决考虑到单独使用品牌或单独使用软件作为抽象类,都会在有新的需求来临后使得父类必须重写。因此需要使用合成/聚合原则代替类继承思想设计程序,是应该有个“手机品牌”抽象类和“手机软件”抽象类,让不同的品牌和功能都分别继承于它们,这样要增加新的品牌或新的功能都不用影响其他类了。结构图:
在工程中,包括以下四个角色:
官方源码链接:
桥接模式Java实现
桥接模式python实现
客观来说这个刚接触确实很难直接应用,但是一旦理解透彻对于面向对象设计有非常大的帮助。有以下情况,可以尝试使用:
职责链模式(Chain of Responsibility)
也叫责任链模式,是一种对象行为型模式。为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。
职责链模式核心是解决服务中先后执行处理关系,从而降低请求发送者和接受者之间的耦合关系。类似于击鼓传花。
要用程序实现加薪、请假申请等需要层层审批的场景。比如向经理提加薪申请,经理没权利然后向总监上报,总监没权限然后向总经理汇报等。
2.2.1 问题分析如果将管理者创建成为一个类,那么该类会具有太多的责任,比如经理、总监以及总经理的审批和上报功能,就违背了单一职责原则。而且以后的需求可能会增加新的管理类别,比如项目经理、部门经理、人事总监等,那么就势必会修改管理者类以完成扩展,就违背了开放封闭原则。
2.2.2 问题解决将公司管理者的类别变成管理者的子类,可以通过多态性来化解分支带来的僵化。然后通过不同管理者之间建立管理关系实现请求的传递,使得请求的发送者和接收者解耦,可以让各服务模块更加清晰。处理者负责处理请求,客户只需要将请求发送到职责链,无需关心具体的处理细节。
其中有两个关键类:
官方源码链接:
职责链模式Java实现
职责链模式python实现
责任链模式通常在以下几种情况使用。
中介者模式(Mediator Pattern)
又叫又叫做调停者模式。它提供了一个中介类,用一个中介对象来封装一系列的对象交互。
中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们的交互。中介者模式属于行为型模式,用来降低多个对象和类之间的通信复杂性。
刚进公司的新人需求其他部门同事帮忙是有困难的,但是通过主管协调就会简单许多。
3.2.1 问题分析将系统分割成许多对象通常可以增加其复用性,但是对象之间大量的连接又使得对象之间的耦合性更强,导致对系统的行为进行较大的改动就比较困难。
3.2.2 问题解决通过中介者对象,可以将系统的网状结构变成以中介者为中心的星型结构,使得对象之间的耦合度变低、扩展性增强,系统的结构不会因为新对象的引入造成大量的修改工作。
在工程中,有以下四个关键类:
官方源码链接:
中介者模式Java实现
中介者模式python实现
中介者模式一般应用于一组对象以定义良好但是复杂的方式进行通信的场合。以及想定制一个分布在多个类中的行为,而又不想生成太多的子类的场合。
3.4 优缺点 3.4.1 优点中介者会变得庞大且复杂,原本多个对象直接的相互依赖变成了中介者和多个同事类的依赖关系,同事类越多,中介者的逻辑就越复杂。
参考[1] datawhale大话设计模式教程云 - GitHub
[2] 秒懂设计模式之桥接模式(Bridge Pattern)
[3] 设计模式(十四)中介者模式
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧