设计模式——桥接模式

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值