栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

《设计模式修炼真经》10 — 桥接模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

《设计模式修炼真经》10 — 桥接模式

1、定义

桥接模式的定义:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度;

我们知道继承的优点有很多,可以把公共的方法或属性抽取,父类封装共性,子类实现特性,这是继承的基本功能;但是继承有一个致命缺点,那就是强侵入,父类有一个方法,子类也必须有这个方法,这是不可选择的,会带来扩展性的问题。

桥接模式就是这一问题的解决方法,桥梁模式描述了类间弱关联关系,父类完全可以把可能会变化的方法放出去,子类要拥有这个方法就把桥梁搭过去,获得这个方法。所以针对继承存在的问题,我们可以扬长避短:对于比较明确不发生变化的,则通过继承来完成;若不能确定是否会发生变化的,则通过桥梁模式来解决。

注:由于继承具有强侵入性,因此,在设计模式中,有一个原则为优先使用组合/聚合,而不是继承;

2、类图

桥接模式的通用类图如下:

桥接模式主要包括以下四种角色:

  • 抽象化角色(Abstraction):主要职责是定义出该角色的行为,同时保存一个对实现化角色的引用,该角色一般是抽象类;
  • 实现化角色(Implementor):它是接口或者抽象类,定义角色必需的行为和属性;
  • 修正抽象化角色(RefinedAbstraction):它引用实现化角色对抽象化角色进行修正;
  • 具体实现化角色(ConcreteImplementor):它实现接口或抽象类定义的方法和属性;

关于这四种角色,大家记住一句话:抽象角色引用实现角色,或者说抽象角色的部分实现是由实现角色完成的;

3、代码实现

桥接模式 的Java代码实现如下:

//实现化角色
public interface Implementor {
    //基本方法
    public void doSomething();
    public void doAnything();
}

//具体实现化角色,代表不同的业务逻辑
public class ConcreteImplementor1 implements Implementor{
     public void doSomething(){
        //业务逻辑处理
     }
     public void doAnything(){
       //业务逻辑处理
     }
}
public class ConcreteImplementor2 implements Implementor{
     public void doSomething(){
       //业务逻辑处理
     }
     public void doAnything(){
       //业务逻辑处理
     }
}

//抽象化角色
public abstract class Abstraction {
	//定义对实现化角色的引用
	private Implementor imp;
	//约束子类必须实现该构造函数
	public Abstraction(Implementor _imp){
		this.imp = _imp;
	}
	//自身的行为和属性
	public void request(){
		this.imp.doSomething();
	}
	//获得实现化角色
	public Implementor getImp(){
		return imp;
	}
}

//修正抽象化角色
public class RefinedAbstraction extends Abstraction {
	//覆写构造函数
	public RefinedAbstraction(Implementor _imp){
		super(_imp);
	}
	//修正父类的行为
	@Override
	public void request(){
		
		super.request();
		super.getImp().doAnything();
	}
}

//使用举例
public class Client {
	public static void main(String[] args) {
		//定义一个实现化角色
		Implementor imp = new ConcreteImplementor1();
		//定义一个抽象化角色
		Abstraction abs = new RefinedAbstraction(imp);
		//执行
		abs.request();
	}
}



4、特点

优点:
1、抽象与实现分离,扩展能力强;
这也是桥梁模式的主要特点,它完全是为了解决继承的缺点而提出的设计模式;在该模式下,实现可以不受抽象的约束,不用再绑定在一个固定的抽象层次上;
2、符合开闭原则;
3、符合合成复用原则;
4、实现细节对客户透明;
使用者不用关心细节的实现,它已经由抽象层通过聚合关系完成了封装;


缺点:
1、增加了设计的复杂度;
由于聚合关系建立在抽象层,要求开发者对抽象层进行设计,能正确地识别出系统中独立变化的维度,这增加了一定的设计难度;


5、适用场景

桥接模式通常适用于以下场景:
1、不适用使用继承的场景
例如,继承层次过渡、无法更细化设计颗粒等场景,需要考虑使用桥梁模式。

2、接口或抽象类不稳定的场景

3、重用性要求较高的场景
设计的颗粒度越细,则被重用的可能性就越大,而采用继承则受父类的限制,不可能出现太细的颗粒度;



我的视频课
下面是我录制的一些视频课,欢迎大家围观~
《设计模式修炼真经》
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结,代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。
本套课程深入介绍了经典的23种设计模式,并加入了自己的感悟,希望大家能够彻底掌握设计模式,写出最好的代码,达到无招胜有招的境界,最终超越这23种设计模式。

《彻底搞定JVM》
JVM是Java中重要的也是较难理解的内容;
面试者对JVM的了解程度某种程度上反映了面试者技术深度,所以JVM也是面试时经常考察的内容;
本课程从JVM运行流程、数据运行时区域组成部分、类加载机制、垃圾回收机制、内存模型、常见面试题讲解等角度出发,帮你彻底搞定JVM,拿下心仪Offer;

《Android性能优化参考》
本课程包含了Android中的App启动优化、UI优化、内存优化、图片优化、耗电量等常见的性能优化场景,通过学习此课程,你将对整个Android性能优化体系有清晰的认识。

性能优化作为Android高级开发的必备技能,也是大厂面试必考的题目,是体现一个人技术深度最好的试金石。

《面试之排序算法》
排序算法是我们面试被问到最多的基础算法,本课程详细介绍了七种排序算法,包括插入排序、选择排序、冒泡排序、谢尔排序、快速排序、堆积排序和二路并归排序。每种算法都详细介绍了核心思想、详细步骤、时间复杂度和代码实现,希望帮助大家深入理解排序算法,搞定面试!

《Android HyBrid App开发实战》
本课程为Android HyBrid App开发实战课程,由浅入深,从三种App的历史和特点开始,介绍了Android WebView的使用、Java和JS交互的原生方式、著名的WebView安全漏洞、JSBridge的原理和使用,最后通过一个网上商城的实战综合全部内容,让同学们掌握并深入理解Android HyBrid App开发。

《AI导论》
介绍人工智能AI的诞生历史和到现在为止的不同发展阶段;介绍了AI领域中常见的名词概念和其关系,包括机器学习、深度学习、神经网络结构搜索 NAS、生成对抗网络 GAN等;最后对AI发展做出展望。
本课程属于导论课程,旨在帮助同学们从宏观层面把握AI,建立AI的知识体系。

《Java注解精讲》
本课程详细介绍了Java中的注解机制,包括注解的定义和分类,注解的使用和自定义,注解的源码和架构分析;
本课程语言简单凝练,视频短小精悍,让你一次彻底搞懂Java注解!

《Java反射精讲》
反射是Java中重要的也是较难理解的内容;
本课程从反射的定义、作用、原理和使用出发,全方位帮你彻底搞定反射;


您的点赞是我前进的动力~


给作者买瓶咖啡提提神~


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/299288.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号