设计模式之桥接模式
2021/9/14 23:34:46
本文主要是介绍设计模式之桥接模式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
基本介绍
- 桥接模式是指:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变
- 是一种结构型设计模式
- 基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象与行为实现分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展
角色:
- Client:桥接模式的调用者
- 抽象类(Abstraction):维护了Implementor/即他的实现类,二者是一个聚合的关系,Abstraction 充当了桥接类
- RefinedAbstraction:是Abstraction抽象类的子类
- Implementor:行为实现类的接口
代码
场景:多个品牌手机有着不同的样式,样式又对应着不同的品牌手机
定义行为实现类的接口
public interface Brand { void call(); void open(); void close(); }
定义了手机的操作行为,定义手机实现接口
public class Vivo implements Brand{ @Override public void call() { System.out.println("vivo手机打电话"); } @Override public void open() { System.out.println("vivo开机"); } @Override public void close() { System.out.println("vivo关机"); } }
public class XiaoMi implements Brand{ @Override public void call() { System.out.println("小米手机打电话"); } @Override public void open() { System.out.println("小米手机开机"); } @Override public void close() { System.out.println("小米手机关机"); } }
定义抽象类,聚合行为操作类的接口,这也就是桥接器
public abstract class Phone { private Brand brand; public Phone(Brand brand){ this.brand = brand; } protected void open(){ brand.open(); } protected void close(){ brand.close(); } protected void call(){ brand.call(); } }
定义桥接的实现
public class FoldedPhone extends Phone{ public FoldedPhone(Brand brand) { super(brand); } @Override public void open(){ super.open(); System.out.println("折叠样式手机"); } @Override public void close(){ super.close(); System.out.println("折叠样式手机"); } @Override public void call(){ super.call(); System.out.println("折叠样式手机"); } }
public class UpRightPhone extends Phone{ public UpRightPhone(Brand brand) { super(brand); } @Override public void open(){ super.open(); System.out.println("直立样式手机"); } @Override public void close(){ super.close(); System.out.println("直立样式手机"); } @Override public void call(){ super.call(); System.out.println("直立样式手机"); } }
客户端调用
public class Client { public static void main(String[] args) { // 获取折叠式手机,样式加品牌 FoldedPhone foldedPhone = new FoldedPhone(new XiaoMi()); foldedPhone.open(); foldedPhone.call(); foldedPhone.close(); System.out.println("------------"); foldedPhone = new FoldedPhone(new Vivo()); foldedPhone.open(); foldedPhone.call(); foldedPhone.close(); System.out.println("------------"); // 直立 UpRightPhone upRightPhone = new UpRightPhone(new XiaoMi()); upRightPhone.open(); upRightPhone.call(); upRightPhone.close(); } }
在这种模式下,我们新增手机只需要添加接口的实现类即可
注意事项和细节
- 实现了抽象和实现部分的分离,从而极大的提供了系统的灵活性,让抽象部分和实现部分独立开来,这有助于系统进行分层设计,从而产生更好的结构化系统
- 对于系统的高层部分,只需要知道抽象部分和实现部分的接口就可以了,其它的部分由具体的业务来完成
- 桥接模式替换了多层继承方案,可以减少子类的个数,降低系统的管理和维护成本
- 桥接模式的引入增加了系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计和编程
- 桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围有一定的局限性,即需要有这样的应用场景
这篇关于设计模式之桥接模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-28MQ底层原理资料详解:新手入门教程
- 2024-11-28MQ项目开发资料详解:新手入门教程
- 2024-11-28MQ项目开发资料详解:入门与初级用户指南
- 2024-11-28MQ消息队列资料入门教程
- 2024-11-28MQ消息队列资料:新手入门详解
- 2024-11-28MQ消息中间件资料详解与应用教程
- 2024-11-28MQ消息中间件资料入门教程
- 2024-11-28MQ源码资料详解与入门教程
- 2024-11-28MQ源码资料入门教程
- 2024-11-28RocketMQ底层原理资料详解