软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。汇总目录链接:【玩转23种Java设计模式】学习目录汇总整理
一、简介
桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(interface)模式。
桥梁模式所涉及的角色有:
- 抽象化(Abstraction)角色:抽象化给出的定义,并保存一个对实现化对象的引用。
- 修正抽象化(Refined Abstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义。
- 实现化(Implementor)角色:这个角色给出实现化角色的接口,但不给出具体的实现。必须指出的是,这个接口不一定和抽象化角色的接口定义相同,实际上,这两个接口可以非常不一样。实现化角色应当只给出底层操作,而抽象化角色应当只给出基于底层操作的更高一层的操作。
- 具体实现化(Concrete Implementor)角色:这个角色给出实现化角色接口的具体实现。
二、实例
1、手机品牌抽象类(AbstractBrand)
public abstract class AbstractBrand {
protected AbstractSoftware abstractSoftware;
// 设置手机软件
public void setSoftware(AbstractSoftware abstractSoftware) {
this.abstractSoftware = abstractSoftware;
}
// 运行
public abstract void run();
}
2、手机软件抽象类(AbstractSoftware)
public abstract class AbstractSoftware {
public abstract void run();
}
3、华为手机(HuaWeiPhone)
public class HuaWeiPhone extends AbstractBrand {
@Override
public void run() {
System.out.println("华为手机");
abstractSoftware.run();
}
}
4、游戏中心软件(GameCenter)
public class GameCenter extends AbstractSoftware {
@Override
public void run() {
System.out.println("运行游戏中心");
}
}
5、测试类
public class Main {
public static void main(String[] args) {
AbstractBrand abstractBrand = new HuaWeiPhone();
abstractBrand.setSoftware(new GameCenter());
abstractBrand.run();
}
}
控制台输出:
华为手机
运行游戏中心
三、总结
1、优点
- 抽象和实现分离。桥梁模式完全是为了解决继承的缺点而提出的设计模式。
- 优秀的扩展能力。
- 实现细节对客户透明。客户不用关心细节的实现,它已经由抽象层通过聚合关系完成了封装。
2、缺点
- 会增加系统的理解与设计难度。由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
3、应用场景
- 不希望或不适用使用继承的场景。
- 接口或抽象类不稳定的场景。
- 重用性要求较高的场景。