概述
通过手机的设计模式来引出桥接模式,现在不同的手机有不用的品牌,但是功能都是类似的,而且手机有不同的样式,比如折叠手机,直立手机,如果我们我们要生产一款直立的华为手机,一款折叠的华为手机,各个品牌和样式相互组合会变成类爆炸。
显然这样的设计肯定不友好,代码量非常大而且非常难以维护,我们需要增加一个样式的时候对于的类也需要改变,显然违背了单一职责原则,如果我们用桥接模式可以很友好的解决此问题。
桥接模式:将实现和抽象放在两个不同的类层次中,使两个层次可以独立改变,桥接模式是一种结构型设计模式。桥接模式基于类的最小设计原则,通过使用封装,聚合已集成等行为让不同的类承担不同的职责,它主要的特点是把抽象与行为实体分离开来,从而可以保持各部分的独立性以为功能的扩展性。
原理图:
Client:桥接模式的调用者。
抽象类(Abstraction):维护了Implementor/即它的实现类ConcreteImplementorA...,二者之间是聚合关系,Abstraction充当桥接类。
RefindAbstraction:是Abstraction的子类。
Implementor:行为实体的类的接口
ConcreteImplementorA/B:行为的具体实现类
下面通过手机改进的代码来演示桥接模式:
/** //开机
public class XiaoMiBrand implements Brand { @Override @Override @Override }
package com.yu.demo.brand; public class HuaWeiBrand implements Brand { @Override @Override @Override }
public class Phone { //聚合桥接
public class ErectPhone extends Phone{ public ErectPhone(Brand brand) { @Override @Override @Override
public class FoldedPhone extends Phone{ public FoldedPhone(Brand brand) { @Override @Override @Override
/** public static void main(String[] args) { |
注意事项:
- 实现了抽象和实现部分的分离,从而极大的提供了系统的灵活性,让抽象部分和实现独立开来,有助于系统进行分层设计,从而产生更好的结构化系统。
- 对于系统的高层部分,只需要抽象部分和实现部分的接口就可以了,其他部分由具体的业务来完成。
- 桥接模式替代多层继承方案,可以减少子类的个数,降低系统的管理和维护成本。
- 桥接模式的引入增加了系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计和编程。
桥接模式要求正确的识别出系统中两个独立变化的维度(抽象和实现),因此其使用范围有一定的局限性,需要在特定的场合才能使用。使用场景:
银行的转账系统,转账的分类:网上转账,柜台转账,AMT转账。转账用户:普通用户,VIP用户。
消息系统,消息的类型:及时消息,推送消息,消费的分类:手机短信,邮件信息。
最后
以上就是孝顺老虎为你收集整理的设计模式之桥接模式的全部内容,希望文章能够帮你解决设计模式之桥接模式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复