重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Hello,大家好,我是你们的新朋友小烤鸭,我们的设计模式系列中断了几天,今天我们继续给它续上,那么我们下面继续来说一种结构型设计模式,那就是大名鼎鼎的“桥接模式”。
创新互联是一家朝气蓬勃的网站建设公司。公司专注于为企业提供信息化建设解决方案。从事网站开发,网站制作,网站设计,网站模板,微信公众号开发,软件开发,小程序制作,十多年建站对混凝土搅拌罐等多个方面,拥有多年的网站维护经验。
定义:桥接模式的官方定义是将抽象部分与它的实现部分分离,使得他们都可以独立变化,是一种结构型对象设计模式;上面这个定义比较拗口,且晦涩难懂,那么我们举个实际生活中的例子:桥使我们大家所熟知的,它的作用就是将两岸联系起来,我们两岸的老百姓可以通过这座桥自由流通,云游四方,桥接模式也差不多也就是这个意思;
适用场景:“桥接模式主要用于在一个系统中需要在抽象化和具体化之间增加更多的灵活性,避免在两个层次建立静态的继承关系,通过桥接模式可以使他们在抽象层建立一个关联关系”,这句话并不好懂,需要有一定的编程工作的经验积累才能慢慢理解,而其中所“抽象部分”和“实现部分”可以以继承的方式独立扩展而互不影响,在程序运行的时候可以动态将一个抽象化子类的对象和一个实现化子类的对象进行组合,即系统需要对抽象化角色和实现化角色进行动态耦合;“一个类存在两个(或多个)独立变化的维度,并且这些维度都需要独立扩展的”,理解这句话桥接模式就不难搞懂了,对于那些不希望使用继承或者因为多层继承导致系统类的数量急剧增加造成“类爆炸”的情况(违反程序设计的“单一职责原则”),桥接模式更合适;
优点:1、将抽象部分和实现部分分离,使他们可以独立变化(符合程序设计的“开闭原则”和“单一职责”);2、增加了程序的扩展能力;
缺点:会增加系统的理解和实际难度,由于聚合关联关系建立在抽象层,需要开发者针对抽象进行设计;
角色分析:
1、抽象化角色(Abstraction):给出抽象化角色的定义,并保存一个对实现化对象的引用;
2、修正抽象化角色(RefinedAbstraction):扩展抽象化角色,改变和修正父类抽象化角色的定义;
3、实现化角色(Implementor):实现化角色的定义,不给出具体实现;
4、具体实现化角色(ConcreteImplementor):给出实现化角色的具体实现;
模式结构图:
重点:说了这么多,简单的讲桥接就是将需要“M*N”个类解决的问题,变成“M+N"个类就能解决的问题;
示例代码:
package cn.com.pep.model.bridge;
/**
*
* @Title: Bridge
* @Description: 桥接口,实现化角色,给出接口定义,不提供具体实现
* @author wwh
* @date 2022-9-9 10:30:15
*/
public interface Bridge {
/**
* @Title: target
* @Description:
*/
public void target();
}