设计模式——桥接模式

定义
桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。

目的
桥梁模式的用意是”将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”。这句话有三个关键词,也就是抽象化、实现化和脱耦。

  • 结构
    《设计模式——桥接模式》 结构
角色类型职责
Implementor实现化角色他是接口或者抽象类,定义角色必须的属性和行为
Abstraction抽象化角色定义出该角色的行为,同时保存一个对实现化角色的引用,该角色一般是抽象类
ConcreteImplementorA ConcreteImplementorB修正实现化角色它实现接口或抽象类定义的方法和属性
RefinedAbstraction修正抽象化角色它引用实现化角色,对抽象化角色进行修改
  • 最佳实践

    汽车品牌内置导航仪,我们希望实现,每个品牌的导航仪都可以在任何一个牌子的汽车上安装并启动。

  • 导航插件的公共接口,定义了导航的行为方法

// this is Implementor
public interface Navigator {
        // base method
    public void work();
    public void getName();
}
// this is ConcreteImplementorA
public class NavigatorX implements Navigator{
    @Override
    public void work() {
        // do something
    }
    @Override
    public void getName(){
        System.out.println("我是X导航,很高兴为你服务!");
    }
 
}
// this is ConcreteImplementorB
public class NavigatorY implements Navigator{
    @Override
    public void work() {
        // do something
    }
    @Override
    public void getName(){
        System.out.println("我是Y导航,很高兴为你服务!");
    }
}
  • 汽车品牌抽象类,这个抽象类主要是导航的安装与启动
// this is Abstraction
public abstract class AbstractVehicleBrand {
    private Navigator navigator
    public abstract void install(Navigator navigator){
        this.navigator = navigator;
    }
    public abstract void open(){
        this.navigator.work();
    }
    public Navigator getNavigator(){
        retur this.navigator;
    }
}
// this is RefinedAbstraction
public class VehicleA extends AbstractVehicleBrand{
    @Override
    public void install(Navigator navigator) {
        super(navigator);
    }
        /*
         * 修正父类行为
         */
    @Override
    public void open() {
        super.open();
        super.getNavigator().getName();
    }
 
}
  • 客户端
public class Client {
    public static void main(String[] args){
    
        INavigator navigatorX = new NavigatorX();
        INavigator navigatorY = new NavigatorYN();
        
        AbstractVehicleBrand vehicleA = new VehicleA();
        vehicleA.install(navigatorX);
        vehicleA.open();
        
        AbstractVehicleBrand vehicleA = new VehicleA();
        vehicleA.install(navigatorY);
        vehicleA.open();
    }

使用场景

多个具有变化的分类共同实现功能时易采用桥接模式

    原文作者:树_生
    原文地址: https://www.jianshu.com/p/1e438af01645
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞