您现在的位置是:群英 > 开发技术 > 编程语言
Java桥接模式的定义是什么,怎么实现
Admin发表于 2022-05-12 17:36:49667 次浏览
这篇文章给大家分享的是“详细介绍Java桥接模式”,文中的讲解内容简单清晰,对大家认识和了解都有一定的帮助,对此感兴趣的朋友,接下来就跟随小编一起了解一下“详细介绍Java桥接模式”吧。


     

本篇文章给大家带来了关于java的相关知识,其中主要介绍了桥接模式的相关问题,桥接模式将抽象与实现分离,使它们可以独立变化,降低了抽象和实现这两个可变维度的耦合度,下面一起来看一下,希望对大家有帮助。

其实在现实生活中,有很多类可以有两个或多个维度的变化,如图形既可按形状分,又可按颜色分,如果用继承方式,m 种形状和 n 种颜色的图形就有 m*n 种,不但对应的子类很多,而且扩展比较困难。

比如不同颜色和字体的文字、不同品牌和功率的汽车、不同性别和职业的男女、支持不同平台和不同文件格式的媒体播放器等。如果用桥接模式就能很好地解决这些问题。

1、桥接模式的定义

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

模式类型:结构设计模式

原理类图:

原理类图说明:

  1. Client类: 桥接模式的调用者
  2. 抽象类(Abstraction) : 维护了Implementor/即它的实现类ConcretelmplementorA…二者是器合关系,Abstraction充当桥接英
  3. RehinedAbstraction: 是Abstraction抽象类的子类lmplementor:行为实现类的接口
  4. ConcretelmplementorA/B: 行为的具体实现类
  5. 从UML图: 这里的抽象类和接口是聚合的关系,其实调用和被调用关系

2、桥接模式的优缺点

优点:

  1. 抽象与实现分离,扩展能力强
  2. 符合开闭原则
  3. 符合合成复用原则
  4. 其实现细节对客户透明

缺点:

  • 由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,能正确地识别出系统中两个独立变化的维度,这增加了系统的理解与设计难度

3、桥接模式的结构

桥接(Bridge)模式包含以下主要角色:

  1. 抽象化(Abstraction)角色: 定义抽象类,并包含一个对实现化对象的引用
  2. 扩展抽象化(Refined Abstraction)角色:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法
  3. 实现化(Implementor)角色:定义实现化角色的接口,供扩展抽象化角色调用
  4. 具体实现化(Concrete Implementor)角色:给出实现化角色接口的具体实现

结构图:


该结构图的实现代码:

实视化角色:

/**
 * 实视化角色
 */public interface Implemntor {

    public void OperationImpl();}

具体实现化角色:

/**
 * 具体实现化角色
 */public class ConcreteImplementorA implements Implemntor{
    @Override
    public void OperationImpl() {
        System.out.println("具体实现化角色被访问");
    }}

抽象化角色:

/**
 * 抽象化角色
 */public abstract class Abstraction {

    protected Implemntor implemntor;

    protected Abstraction(Implemntor implemntor){
        this.implemntor = implemntor;
    }

    public abstract void Operation();}

扩展抽象化角色:

/**
 * 扩展抽象化角色
 */public class RefinedAbstraction extends Abstraction{

    protected RefinedAbstraction(Implemntor implemntor) {
        super(implemntor);
    }

    public void Operation(){
        System.out.println("扩展抽象化角色被访问");
        implemntor.OperationImpl();
    }}

测试类:

public class Test {
    public static void main(String[] args) {

        Implemntor implemntor = new ConcreteImplementorA();
        Abstraction abs = new RefinedAbstraction(implemntor);
        abs.Operation();

    }}

输出:

扩展抽象化角色被访问
具体实现化角色被访问

4 、桥接模式的案例实现

将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变

交通工具在路上行驶,这里有两个维度的变化,交通工具的类型不同路也分水泥路和柏油路

类图:

交通工具类:

/**
 * 交通工具类
 */public interface Vehicle {

    public void drive();}

具体的交通工具:小汽车

/**
 * 具体的交通工具:小汽车
 */public class Car implements Vehicle{
    @Override
    public void drive() {
        System.out.println("小汽车");
    }}

具体的交通工具:大巴车

/**
 * 具体的交通工具:大巴车
 */public class Bus implements Vehicle{
    @Override
    public void drive() {
        System.out.println("大巴车");
    }}

抽象的路:

/**
 * 抽象的路
 */public abstract class Road {

    protected Vehicle vehicle;

    public Road(Vehicle vehicle){
        this.vehicle = vehicle;
    }

    public abstract void driveOnRoad();}

具体的路:油柏路

/**
 * 具体的路:油柏路
 */public class UnpavedRoad extends Road{
    public UnpavedRoad(Vehicle vehicle) {
        super(vehicle);
    }

    @Override
    public void driveOnRoad() {

        super.vehicle.drive();
        System.out.println("行驶在油柏路");
    }}

具体的路:水泥路

/**
 * 具体的路:水泥路
 */public class CementRoad extends Road{
    public CementRoad(Vehicle vehicle) {
        super(vehicle);
    }

    @Override
    public void driveOnRoad() {
        super.vehicle.drive();
        System.out.println("行驶在水泥路");
    }}

测试类:

//测试public class Test {
    public static void main(String[] args) {

        Road roadCar = new CementRoad(new Car());
        roadCar.driveOnRoad();

        Road roadBus = new CementRoad(new Bus());
        roadBus.driveOnRoad();

    }}

输出:

小汽车
行驶在水泥路
大巴车
行驶在水泥路

5、桥接模式的注意事项

  1. 实现了抽象和实现部分的分离,从而极大的提供了系统的灵活性,让抽象部分和实现部分独立开来,这有助于系统进行分层设计,从而产生更好的结构化系统
  2. 对于系统的高层部分,只需要知道抽象部分和实现部分的接口就可以了,其它的部分由具体业务来完成
  3. 桥接模式替代多层继承方案,可以减少子类的个数,降低系统的管理和维护成本
  4. 桥接模式的引入增加了系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计和编程
  5. 桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围有一定的局限性,即需要有这样的应用场景

6、桥接模式应用场景

对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用.


到此这篇关于“详细介绍Java桥接模式”的文章就介绍到这了,感谢各位的阅读,更多相关详细介绍Java桥接模式内容,欢迎关注群英网络资讯频道,小编将为大家输出更多高质量的实用文章!

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

标签: Java桥接模式
相关信息推荐
2022-05-14 16:46:07 
摘要:这篇文章主要介绍了C++类的大小,在C++中,结构体和类的唯一区别就是结构体和类具有不同的默认访问控制属性,下面一起进入文章查看详细内容
2022-07-25 17:55:02 
摘要:html引用bootstrap的方法:1、使用“link rel”方式在线引用bootstrap;2、将Bootstrap下载到本地,并将需要的文件放在项目下,然后在相应文件中引入即可。
2022-05-06 18:09:23 
摘要:小程序怎么实现登录功能?本篇文章给大家介绍一下小程序登录的正确打开方式,希望对大家有所帮助!
云活动
推荐内容
热门关键词
热门信息
群英网络助力开启安全的云计算之旅
立即注册,领取新人大礼包
  • 联系我们
  • 24小时售后:4006784567
  • 24小时TEL :0668-2555666
  • 售前咨询TEL:400-678-4567

  • 官方微信

    官方微信
Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
微信公众号
返回顶部
返回顶部 返回顶部