桥接模式学习笔记

概述

桥接模式是一种结构型设计模式,它可以将一个大类或一系列紧密相关的类分成两个独立的层次结构——抽象和实现——从而能在开发时分别使用。

适用场景

当一个类存在多个维度变化,且每个维度都可能发生变化时,为避免类的爆炸式增长,可以采用桥接模式。同时,当需要跨越多个平台或系统时,也可以考虑使用桥接模式。

组成结构

  • 抽象类(Abstraction):定义了抽象类的接口,并维护一个指向实现类对象的引用;
  • 扩展抽象类(RefinedAbstraction):扩展抽象类,通常是通过添加新方法来拓展抽象类的接口;
  • 实现类接口(Implementor):定义实现类的接口,该接口不一定要与抽象类接口完全一致,事实上这两个接口可以完全不同;
  • 具体实现类(ConcreteImplementor):具体实现Implementor接口的对象。

实例

以手机软件为例,假设现在要开发一个游戏软件,需要考虑游戏的类型(竞技类、休闲类)和运行平台(Android、iOS),则可以采用桥接模式来设计该软件,具体代码如下:

javaCopy Code
// Implementor public interface Platform { void runGame(); } // Concrete Implementor A public class AndroidPlatform implements Platform { @Override public void runGame() { System.out.println("在Android平台上运行游戏"); } } // Concrete Implementor B public class IOSPlatform implements Platform { @Override public void runGame() { System.out.println("在iOS平台上运行游戏"); } } // Abstraction public abstract class Game { protected Platform platform; public Game(Platform platform) { this.platform = platform; } public abstract void play(); } // Refined Abstraction A public class SportsGame extends Game { public SportsGame(Platform platform) { super(platform); } @Override public void play() { System.out.print("竞技类游戏:"); platform.runGame(); } } // Refined Abstraction B public class CasualGame extends Game { public CasualGame(Platform platform) { super(platform); } @Override public void play() { System.out.print("休闲类游戏:"); platform.runGame(); } } // Client public class Application { public static void main(String[] args) { Platform androidPlatform = new AndroidPlatform(); Platform iosPlatform = new IOSPlatform(); Game sportsGameOnAndroid = new SportsGame(androidPlatform); sportsGameOnAndroid.play(); Game casualGameOnIOS = new CasualGame(iosPlatform); casualGameOnIOS.play(); } }

以上代码中,实现类接口是Platform,具体实现类有AndroidPlatformIOSPlatform;抽象类是Game,扩展抽象类有SportsGameCasualGame。通过桥接模式的设计,可以将游戏的类型和运行平台分别作为两个维度来设计,在开发时可以分别考虑不同维度的变化,从而更好地满足系统的需求。