美文网首页
设计模式(8)-- 桥接

设计模式(8)-- 桥接

作者: MikeShine | 来源:发表于2022-03-29 20:04 被阅读0次

1. 写在前面

上一小节中我们学习了 适配器 Adapter,其主要的应用场景是将一类对象转换成为另一类对象。
这里转换的过程分为3步:

  • 接受原对象
  • 实现原对象的逻辑
  • 返回目标对象

2. 桥接 Bridge

桥接Bridge Pattern 的特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。
这个概念还是非常抽象的,其主要应用在如下场景:

多维度变化,多层继承结构
我们将每一个维度进行独立封装,使得各个维度可以独立扩展。避免直接继承带来的子类爆炸。


3. 使用

使用场景:一个类在 2个维度 都会变化

记住这是桥接使用的唯一场景。

我们看一个电脑的例子,在传统的继承结构中我们会如下安排整体的结构。


按照传统的继承结构,我们会产生3个级别, 4 个子类。

但是如果我们按照维度来封装,即 Brand & Type

直接看代码

首先是对第一个维度 Brand 的封装,将其封装为一个接口。

//  品牌维度
public Interface Brand(){
      // 品牌维度的信息
      void  brandInfo();
}

public class AppleBrand implements Brand{
    @Override
    void brandInfo(){
        sout("Apple Brand !")
    }
}

public class AsusBrand implements Brand{
    @Override
    void brandInfo(){
        sout("Asus Brand !")
    }  
}

然后是第二个维度的封装,因为最终我们需要包含2个维度的信息,因此需要使用一个 抽象类持有第一个维度的引用,同时在 这个抽象类中的抽象方法中,写入第二个维度信息。

// 类型维度
//  这里因为类型是要包含品牌在内的,因此需要持有品牌的接口
public abstract class Computer(){
      protected Brand brand;

      void Computer(Brand brand){
            this.brand = brand;
      }

      // 这个抽象接口是要实现2个维度的逻辑的
      public abstract info();
}


// 具体的类型
public Laptop extends Computer{
      void Laptop(Brand brand){
          super(brand);
      }

      @Override 
      public void info(){
          // Brand 维度的信息
          brand.info();
          // Type 维度的信息
          sout("this is laotop !")
      }
}


public class Desktop extends Computer{
    public Desktop(Brand brand) {
        super(brand);
    }

    @Override
    public void info() {
        // Brand 维度信息
        brand.info();
        // Type 维度信息
        System.out.println("this is desktop");
    }
}

现在到了具体的使用了。
可以看到两个维度可以灵活组合。

       MacBrand macBrand = new MacBrand();
        AsusBrand asusBrand = new AsusBrand();

        Desktop macDesktop = new Desktop(macBrand);
        macDesktop.info();
        Desktop asusDesktop = new Desktop(asusBrand);
        asusDesktop.info();


        Laptop macLaptop = new Laptop(macBrand);
        macLaptop.info();
        Laptop asusLaptop = new Laptop(asusBrand);
        asusLaptop.info();

下面是输出

this is Mac Brand!
this is desktop
This is Asus brand!
this is desktop
this is Mac Brand!
this is laptop!
This is Asus brand!
this is laptop!

相关文章

  • java/android 设计模式学习笔记(8)---桥接模式

    java/android 设计模式学习笔记(8)---桥接模式 【备注】只用于个人收藏

  • 设计模式(8)-- 桥接

    1. 写在前面 上一小节中我们学习了 适配器 Adapter,其主要的应用场景是将一类对象转换成为另一类对象。这里...

  • 桥接模式

    设计模式:桥接模式(Bridge)

  • 设计模式-桥接模式

    设计模式-桥接模式 定义 桥接模式(Bridge Pattern)也称为桥梁模式、接口(Interface)模式或...

  • 设计模式——桥接模式

    设计模式——桥接模式 最近公司组件分享设计模式,然而分配给我的是桥接模式。就在这里记录我对桥接模式的理解吧。 定义...

  • 设计模式之桥接模式

    设计模式之桥接模式 1. 模式定义 桥接模式又称柄体模式或接口模式,它是一种结构性模式。桥接模式将抽象部分与实现部...

  • Java设计模式<桥接模式>

    Java设计模式<桥接模式> 意图 桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将...

  • Java设计模式——桥接模式

    Java设计模式之桥接模式 回顾 上一期分享了适配器模式,主要为了实现解耦 桥接模式 简介 桥接模式是对象的结构模...

  • 桥接模式

    介绍 桥接模式(Bridge Pattern) 也称为桥梁模式,是结构型设计模式之一。桥接模式的作用就是连接 "两...

  • 设计模式-桥接模式

    桥接模式介绍 桥接模式(Bridge Pattern)也称为桥梁模式,是结构型设计模式之一。顾名思义其与现实中的桥...

网友评论

      本文标题:设计模式(8)-- 桥接

      本文链接:https://www.haomeiwen.com/subject/rvtbjrtx.html