Java设计模式中桥接模式是什么/桥接模式有什么用,怎么运用桥接模式

继续整理记录这段时间来的收获,详细代码可在我的Gitee仓库Java设计模式克隆下载学习使用!

5.5 桥接模式

5.5.1 定义

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

5.5.2 结构

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

5.5.3 案例(播放器)

  • VideoFile
public interface VideoFile {  
     void decode(String fileName);  
}
  • AviVideoFile
public class AviVideoFile implements VideoFile{  
    @Override  
    public void decode(String fileName) {  
        System.out.println("AviVideo 视频文件: " + fileName);  
    }  
}
  • RmvVideoFile
public class RmvVideoFile implements VideoFile{  
    @Override  
    public void decode(String fileName) {  
        System.out.println("RmvVideoFile 视频文件: " + fileName);  
    }  
}
  • 抽象化角色
public abstract class OperatingSystem {  
//    声明videoFile文件  
    public VideoFile videoFile;  
    public OperatingSystem(VideoFile videoFile) {  
        this.videoFile = videoFile;  
    }  
    public abstract void play(String fileName);  
}
  • 抽象具体化角色
public class WindowsSystem extends OperatingSystem{  
    public WindowsSystem(VideoFile videoFile) {  
        super(videoFile);  
    }  
    @Override  
    public void play(String fileName) {  
        videoFile.decode(fileName);  
    }  
}
  • 抽象具体化角色
public class MacSystem extends OperatingSystem{  
    public MacSystem(VideoFile videoFile) {  
        super(videoFile);  
    }  
    @Override  
    public void play(String fileName) {  
        videoFile.decode(fileName);  
    }  
}
  • 类图![[Pasted image 20230104164508.png]]

5.5.4 优点

  • 提高了系统的可扩充性,且两维度扩充均不需要修改原有系统
  • 实现细节对客户透明

5.5.5 使用场景

  • 当某个类存在两个独立变化维度且两维度均需要扩展时
  • 当某系统不希望使用继承或因多层继承导致系统类个数急剧增加时
  • 当某系统需要在构件的抽象化角色和具体化角色之间增加更多灵活性时,可通过此模式在抽象层建立关联关系,避免在两个层次之间建立静态的继承关系
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值