设计模式之桥接设计模式

打印 上一主题 下一主题

主题 966|帖子 966|积分 2898


  • 简介

    • 与适配器模式类似,桥接设计模式也是结构型模式
    • 将抽象部分与实现部分分离,使它们都可以独立的厘革
    • 普通来说,是通过组合来桥接其它的行为/维度

  • 应用场景举例

    • 传统方式

    • 使用桥接设计模式之后


  • 编码示例
    1. /**
    2. * 抽象角色:手机
    3. */
    4. abstract class Phone {
    5.     /**
    6.      * 通过组合的方式来桥接其他行为
    7.      */
    8.     protected Color color;
    9.     public void setColor(Color color) {
    10.         this.color = color;
    11.     }
    12.     /**
    13.      * 手机自己的方法
    14.      */
    15.     public abstract void run();
    16. }
    17. /**
    18. * 颜色维度
    19. */
    20. interface Color {
    21.     void useColor();
    22. }
    23. /**
    24. * 具体颜色
    25. */
    26. class RedColor implements Color {
    27.     @Override
    28.     public void useColor() {
    29.         System.out.println("红色");
    30.     }
    31. }
    32. /**
    33. * 具体颜色
    34. */
    35. class BlueColor implements Color {
    36.     @Override
    37.     public void useColor() {
    38.         System.out.println("蓝色");
    39.     }
    40. }
    41. /**
    42. * 手机的实例化:小米手机
    43. */
    44. class XiaomiPhone extends Phone {
    45.     public XiaomiPhone(Color color) {
    46.         super.setColor(color);
    47.     }
    48.     @Override
    49.     public void run() {
    50.         System.out.println("小米手机");
    51.         color.useColor();
    52.     }
    53. }
    54. /**
    55. * 手机的实例化:华为手机
    56. */
    57. class HuaweiPhone extends Phone {
    58.     public HuaweiPhone(Color color) {
    59.         super.setColor(color);
    60.     }
    61.     @Override
    62.     public void run() {
    63.         System.out.println("华为手机");
    64.         color.useColor();
    65.     }
    66. }
    67. public class Main {
    68.     public static void main(String[] args) {
    69.         XiaomiPhone redXmPhone = new XiaomiPhone(new RedColor());
    70.         redXmPhone.run();
    71.         XiaomiPhone blueXmPhone = new XiaomiPhone(new BlueColor());
    72.         blueXmPhone.run();
    73.         HuaweiPhone redHwPhone = new HuaweiPhone(new RedColor());
    74.         redHwPhone.run();
    75.         HuaweiPhone blueHwPhone = new HuaweiPhone(new BlueColor());
    76.         blueHwPhone.run();
    77.     }
    78. }
    复制代码
  • 优点

    • 抽象和实现的分离
    • 优秀的扩展本领,符合开闭原则

  • 缺点

    • 增加系统的理解与设计难度
    • 使用聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程,比如抽象类汽车,里面聚合了颜色类,有点像适配器

  • 总结和对比

    • 按GOF的说法,桥接模式和适配器模式用于设计的差别阶段

      • 桥接模式用于设计的前期,精细化的设计,让系统更加灵活
      • 适配器模式用于设计完成之后,发现类、接口之间无法一起工作,需要进行填坑

    • 适配器模式常常用在第三方API协同工作的场合,在功能集成需求越来越多的今天,这种模式的使用频度越来越高,包括有些同学听过外观设计模式,这个也是某些场景和适配器模式一样


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦见你的名字

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表