手机操作问题:现有不同手机类型,对不同品牌的手机实现操作编程(比如说:开机、关机、上网、打电话等)
传统方法类图:
优点:易于操作,比较好理解
缺点:
1)传统方案解决手机操作问题,会带来扩展性问题,如果新增一种手机类型,则要新增各种品牌手机的类,同样我们新增一个品牌,则要在各个手机样式中新增类(也不是绝对,看情况),会带来类爆炸问题。
2)违反单一职责原则,当我们增加手机样式时,要增加各种品牌的手机类。增加了代码维护成本。
3)解决方案,使用桥接模式。
桥接模式基本介绍:
1)桥接(Bridge)模式是指:将实现和抽象放在两个不同的层次当中,使得两个层次可以独立改变。
2)原型模式是一种结构型模式。
3)Bridge模式是基于类的最小设计原则,迫使使用封装、聚合以及继承等行为让不同的类承担不同的职责,它的主要特点是把抽象和行为实现(implementation)分离开来,从而保持各部分的独立性和他们对应功能的扩展。
桥接模式类图:
图解说明:
1)Client:客户端角色,桥接模式的调用者。
2)抽象类(Abstraction):维护了Implementor和它的实现类。CurrentImplementA、CurrentImplementB等等是抽象类的实现类,抽象类和接口implementor二者是聚合关系。Abstraction充当桥接类。
3)RefinedAbstraction是抽象类的子类。
4)CurrentImplementA/B:行为的具体实现类。
5)Implementor:行为的实现接口。
6)从UML中可以看出:抽象类和接口是聚合关系,是调用和被调用的关系。
桥接模式解决手机操作问题:
桥接模式解决手机操作问题代码实现:
桥接模式在jdbc源码的分析:
1)在jdbc中使用到了桥接模式,jdbc的Driver接口,如果从桥接模式来看,Driver是一个接口,下面有mysql的Driver、Oracle的Driver这些就可以当做实现接口的类。
2)代码+Debug分析
桥接模式的注意事项和细节:
1)实现了抽象和部分的分离,从而极大的提高了系统的灵活性,让抽象部分和实现部分独立开来,这样有助于系统的分层设计,从而产生结构化更好的系统。
2)对于系统的高层部分,只需要知道抽象和实现部分接口即可,其他的部分由具体业务来完成。
3)桥接模式替代多层继承方案,可以减少子类的个数,降低系统管理和维护成本。
4)桥接模式的引入增加了系统的理解和难度,由于聚合关联关系建立在抽象层,要求开发者针对接口和抽象编程。
5)桥接模式要求正确识别系统中两个独立变化的维度,其使用范围有一定的局限性。既需要这样的应用场景:
桥接模式应用场景:
1)对于那些不希望使用继承或者多重继承导致系统类个数急剧增加的系统,桥接模式尤为适用。
常见的应用场景:
--jdbc驱动程序
--银行转账系统
转账分类:网上转账、柜台转账、AMT转账
转账用户类型:普通用户、银行卡用户、金卡用户..
--消息管理:
消息类型:即时消息、延时消息
消息分类:手机短信消息、QQ消息、邮件消息等等。