桥接模式

18 篇文章 0 订阅
9 篇文章 0 订阅

概述

类似于多继承方案,但是Java没有多继承,桥接模式是比多继承更好的替代方案

核心:解耦抽象和实现

角色

抽象角色:该类持有一个对实现角色的引用,抽象角色中的方法需要实现角色来实现

修正抽象角色:抽象角色的具体实现,对它的方法进行完善和扩展

实现角色:定义实现维度的基本操作,提供给抽象角色使用

具体实现角色:实现角色的具体实现

设计与实现

设计思想:咖啡馆喝咖啡

1、提供糖和咖啡

package com.xjion.bridge;
/**
 * 咖啡中的糖分
 */
public interface CoffeeFlavor {
	String addWhat();
}
package com.xjion.bridge;
/**
 * 咖啡
 */
public abstract class Coffee {
	CoffeeFlavor flavor;

	public Coffee(CoffeeFlavor flavor) {
		this.flavor = flavor;
	}
	
	public abstract void makeCoffee();
}

2、咖啡糖分选择

package com.xjion.bridge;
/**
 * 原味
 */
public class PlainFlavor implements CoffeeFlavor {
	@Override
	public String addWhat() {
		return "原味拿铁";
	}
}

/**
 * 加糖
 */
class SugarFlavor implements CoffeeFlavor{
	@Override
	public String addWhat() {
		return "加糖摩卡";
	}
}

3、选择大杯或者小杯咖啡

package com.xjion.bridge;
/**
 * 大杯咖啡
 */
public class LargeCoffee extends Coffee {
	
	public LargeCoffee(CoffeeFlavor flavor) {
		super(flavor);
	}

	@Override
	public void makeCoffee() {
		System.out.println("大杯咖啡:"+flavor.addWhat());
	}
}

class SmallCoffee extends Coffee{

	public SmallCoffee(CoffeeFlavor flavor) {
		super(flavor);
	}

	@Override
	public void makeCoffee() {
		System.out.println("小杯咖啡:"+flavor.addWhat());
	}
	
}

4、客户端使用

package com.xjion.bridge;

public class Test {
	public static void main(String[] args) {
		//原味
		CoffeeFlavor flavor = new PlainFlavor();
		//大杯原味咖啡
		Coffee coffee = new LargeCoffee(flavor);
		//制作
		coffee.makeCoffee();
		//制作一杯小杯的加糖的咖啡
		new SmallCoffee(new SugarFlavor()).makeCoffee();
	}
}

实现原理

采用桥接模式解耦了咖啡的大小杯和有无糖这两个独立变化的维度,后续如果咖啡馆有更多服务,那么可以直接新建一个中杯类继承coffee即可,味道改变只需要新建一个类实现CoffeeFlavor即可。

特点

抽象与实现分离,避免使用继承,解耦了抽象与实现,使系统扩展性大大增强

优秀的扩展能力,实现细节对客户透明,通过聚合构建了稳定的架构(封装)

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值