结构模式-桥接模式

设计模式,个人觉得狠抽象,搜索相关的桥接模式的讲解几乎就是千篇一律!

该内容结合多篇文章及个人的理解所写,有错请提出!


传统模式介绍

  • 一个产品抽象类中,在传统方式中产品的扩展一般采用继承方式增加新需求
  • 缺点
    *对象的继承关系,在编译前已板上钉钉定义好,无法在运行时期动态式应变
    *强硬的继承关系,父类的变化极大可能会波及至子类
    *易造成类爆炸

如下图

传统模式:

当对某类型新增加,由于传统继承方式都会引起大量的类的新生!

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

桥接模式

  • 一种多维式的组合/聚合思想
  • 桥接模式中分为3种角色
    • 抽象
      • 在桥接模式中的抽象角色
      • 一般是在整个系统中作为主体所存在,并且是用abstract所修饰的
      • 需持有实现角色的引用,通过set或者构造函数达成聚合/组合关系
    • 实现
      • 在桥接模式中的实现角色
      • 其实是一个接口,依赖/附属于抽象角色而存在,和抽象角色处于一个被组合/被聚合的关系
      • 在桥接模式中的桥角色也即是实现角色和抽象角色中的组合/聚合的关系
    • 特点
      • 抽象与行为实现分离,保持各个部分的独立性以及各个部分的功能扩展
        在这里插入图片描述

代码表达

//经典的手机品牌及应用案例
//桥接模式中抽象角色
class abstract class Phone{
    protected List<App> app;
    public void supportApp(){}
}

//抽象的派生类 即手机对应的平台:Iphone HuaWeiPhone等
class Iphone extends Phone{
    //通过聚合关系达成桥关系
    public void setApp(List<App> app){ super.app = app; }
    public void supportApp(){ 手机支持的应用... }
}
class HuaWeiPhone extends Phone{
    //通过组合关系达成桥关系
    public HuaWeiPhone(List<App> app){ super.app = app; }
    public void supportApp(){ 手机支持的应用... }
}

//桥接模式中实现角色
interface App{
     private String appName;
     ...App的操作抽象方法
}
//实现角色的实现类:Game(游戏)、MP3、MP4等
class MP3 implements App{ ...省略 }
class Game implements App{ ...省略 }
//后续添加的新功能MP4
class MP4 implements App{ ...省略 }

public class Main{
    public static mian(String[] args){
        //首先一步:手机
        Phone phone = new Iphone();
        //iphone支持的应用
        App mp3 = new MP3();
        App game = new Game();
        List<App> app = new ArrayList<App>();
        app.add(mp3);  app.add(game);
        //聚合关系,及Iphone支持的应用
        phone.setApp(app); //支持的应用有MP3、Game
        
        //由于时代的发展,新出了一款MP4应用,需要应用在各大手机上,作为基础功能
        //这时候实现角色这边只需要添加一个实现类,而抽象角色这边的派生类不需要任何的变动,或者只需要少许的变动
         app.add(mp4);
         phone.setApp(app); //支持的应用有MP3、Game、MP4        
        
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值