Java设计模式- 结构型设计模式-桥接模式

Java设计模式- 结构型设计模式-桥接模式

从这一专栏开始将学习设计模式,上课学习和自己总结归纳的笔记将总结出来供大家参考。
参考书籍:《设计模式就该这样学》

其他文章:

Java设计模式-UML类图 Java设计模式-七大架构设计原则-开闭原则
Java设计模式-七大架构设计原则-依赖倒置原则 Java设计模式-七大架构设计原则-单一职责原则
Java设计模式-七大架构设计原则-接口隔离原则 Java设计模式-七大架构设计原则-最少知道原则(迪米特法则)
Java设计模式-七大架构设计原则-里氏替换原则和合成复用原则 Java设计模式-创建型设计模式-简单工厂模式
Java设计模式-创建型设计模式-工厂方法模式(工厂模式) Java设计模式-创建型设计模式-抽象工厂模式
Java设计模式-创建型设计模式-建造者模式 Java设计模式-创建型设计模式-原型模式
Java设计模式-创建型设计模式-单例模式 Java设计模式-结构型设计模式-适配器模式
Java设计模式- 结构型设计模式-享元模式 Java设计模式- 结构型设计模式-外观模式
Java设计模式- 结构型设计模式-桥接模式 Java设计模式-结构型模式设计模式-组合模式
Java设计模式-行为型设计模式-观察者模式

文章目录

  • Java设计模式- 结构型设计模式-桥接模式
    • 一、结构型设计模式
    • 二、桥接模式
      • 1.桥接模式定义
      • 2.桥接模式的角色
      • 3.桥接模式的特点
      • 4.桥接模式的类图
      • 5.桥接模式的代码实现

一、结构型设计模式

在GOF23种设计模式中,有三种类型的设计模式,分别是:创建型设计模式、结构型设计模式、行为型设计模式

结构型设计模式有:代理模式、适配器模式、桥接模式、装饰模式、外观模式、享元模式、组合模式 7 种结构型模式。

​ 类结构型模式:关心类的组合,由多个类组合成一个更大的系统,在类结构型模式中一般只存在继承关系和实现关系。

​ 对象结构型模式:关心类与对象的组合,通过关联关系,在一个类中定义另外一个类的实例对象,然后通过该对象调用相应的方法。

二、桥接模式

1.桥接模式定义

桥接模式(Bridge Pattern)即将抽象部分与它的实现部分分离开来,使他们都可以独立变化。

桥接模式将继承关系转化成关联关系,它降低了类与类之间的耦合度,减少了系统中类的数量,也减少了代码量。

将抽象部分与他的实现部分分离这句话不是很好理解,其实这并不是将抽象类与他的派生类分离,而是抽象类和它的派生类用来实现自己的对象。这样还是不能理解的话。我们就先来认清什么是抽象化,什么是实现化,什么是脱耦。

在GoF23种设计模式中属于结构型设计模式:

​ 其中包括:代理模式、适配器模式、桥接模式、装饰模式、外观模式、享元模式、组合模式 7 种结构型模式。

2.桥接模式的角色

(1)Abstraction:抽象类

(2)RefinedAbstraction:扩充抽象类。

(3)Implementor:实现类接口。

(4)ConcreteImplementor:具体实现类 。

3.桥接模式的特点

优点:

桥接模式可以取代多层继承的方案。 多层继承违背了单一职责原则,复用性较差,类的个数也非常多。桥接模式可以极大的减少子类的个数,从而降低管理和维护的成本。
桥接模式极大的提高了系统可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有的系统,符合开闭原则。

缺点:

会增加系统的理解与设计难度,由于关联关系建立在抽象层,要求开发者一开始就针对抽象层进行设计与编程
正确识别出系统中两个独立变化的维度并不是一件容易的事情

4.桥接模式的类图

Java设计模式- 结构型设计模式-桥接模式_第1张图片

5.桥接模式的代码实现

案例:
现在需要开发一个跨平台的视频播放器,在Linux、Windows平台上面都能播放Mp4、AVL格式的视频。

类图如下:

Java设计模式- 结构型设计模式-桥接模式_第2张图片

CoolSummerMoonPlayer:抽象类(模拟场景中视频播放器)
LinuxPlayer、WindowsPlayer:扩充抽象类(模拟场景中Linux、Windows平台)
Media:实现类接口(模拟场景中播放器格式)
Mp4、AVL:具体实现类(模拟场景中Mp4、AVL格式)

具体代码实现

1.CoolSummerMoonPlayer:抽象类(模拟场景中视频播放器)

public abstract class CoolSummerMoonPlayer {

    private Media media;

    public Media getMedia() {
        return media;
    }
    public void setMedia(Media media) {
        this.media = media;
    }

    public void player(){
        media.format();
    }
}

2.LinuxPlayer、WindowsPlayer:扩充抽象类(模拟场景中Linux、Windows平台)

public class LinuxPlayer extends CoolSummerMoonPlayer {
    @Override
    public void player(){
        System.out.println("Linux下开始播放");
        super.player();
    }
}

public class LinuxPlayer extends CoolSummerMoonPlayer {
    @Override
    public void player(){
        System.out.println("Linux下开始播放");
        super.player();
    }
}

3.Media:实现类接口(模拟场景中播放器格式)

public interface Media {
    void format();
}

4.Mp4、AVL:具体实现类(模拟场景中Mp4、AVL格式)

public class AVL implements Media {
    @Override
    public void format() {
        System.out.println("playing avl");
    }
}

public class Mp4 implements Media{
    @Override
    public void format() {
        System.out.println("playing mp4");
    }
}

5.测试代码

public class TestBridge {
    public static void main(String[] args) {
        Media mp4 = new Mp4();
        CoolSummerMoonPlayer linuxPlayer = new LinuxPlayer();
        linuxPlayer.setMedia(mp4);
        linuxPlayer.player();

        Media avl = new AVL();
        CoolSummerMoonPlayer windowsPlayer = new WindowsPlayer();
        windowsPlayer.setMedia(avl);
        windowsPlayer.player();

    }
}

Java设计模式- 结构型设计模式-桥接模式_第3张图片

你可能感兴趣的:(Java设计模式,java,设计模式,桥接模式)