Java设计模式架构算法设计模式和编程理论

设计模式——桥接模式

2018-10-11  本文已影响10人  树生1995

定义
桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(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();
    }

使用场景

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

上一篇 下一篇

猜你喜欢

热点阅读