`

Bridge 桥梁模式

阅读更多

《Java与模式》中提到Bridge模式的用意是将“抽象化(abstration)与实现化(Implmentation)脱耦,使二者可以独立的变化”。

 

抽象化就是指多个实体之间的共有概念性联系,就是忽略一些信息,把不同实体当同一实体对待。

 

实现化就是针对抽象化具体的实现。

 

脱藕也就是Bridge中针对抽象化和实现化的重要意图之所在,也就是将抽象化和实现化之间进行一定的分离,降低它们之间的耦合性,继承是属于一种强耦合(强关联),或说将它们之间的强关联关系转化成弱关联关系。

 

强关联就是在程序编译期间已经确定关联关系,而在运行期间不能改变他们之间的关联关系。而弱关联就是动态的确定可以在运行期间改变他们之间的关联。继承关系就是强关联,聚合就是若关联关系,所以Bridge的核心思想就在于将继承关系向聚合关系转换,换句话说就是用聚合代替继承。

 

Bridge模式多用于在实体在两个维度上的动态组合是运用。譬如:食物(Food)是一实体,可以抽象出来,从一个维度扩展来说如具体食物面条(Noodle),米饭(Rice)等,而从另外一个维度扩展可以是干面,湿面,干饭,稀饭。此时作为具体食物可以继承Food抽象类,如果运用Bridge模式就不继承,采用聚合形式将强关联转变为若关联关系。

package com.wayne.bridge;

public abstract class Food {
	protected FoodImpl foodImpl;
	public void toFull(){
		foodImpl.toFullImpl();
	}
}


package com.wayne.bridge;

public abstract class FoodImpl {
	public abstract void toFullImpl();
}


package com.wayne.bridge;

public class Rice extends FoodImpl {

	@Override
	public void toFullImpl() {
		System.out.println("rice make me  full.......");
	}

}


package com.wayne.bridge;

public class Noodle extends FoodImpl {

	@Override
	public void toFullImpl() {
		System.out.println("noodles make me full.......");
	}

}


package com.wayne.bridge;

public class DryFood extends Food {
	public DryFood(FoodImpl foodImpl) {
		this.foodImpl = foodImpl;
	}
}


package com.wayne.bridge;

public class WedFood extends Food {
	public WedFood(FoodImpl foodImpl) {
		this.foodImpl = foodImpl;
	}
}


package com.wayne.bridge;

public class Person {

	public static void main(String[] args) {
		
		//来一碗干饭
		Food food = new DryFood(new Rice());
		food.toFull();
		//来一碗汤面
		food = new WedFood(new Noodle());
		food.toFull();
	}

}

 如果要炒饭或者炒面,那么只需要添加一个类继承Food ---> FryFood就可以了

 

Bridge模式就是分离抽象和实现,封装可变因素。

分享到:
评论
3 楼 crawler 2010-04-11  
banfry 写道
Rice和Noodle的接口中应该还有一个抽象方法,拿什么食品,实现各自的逻辑,不过这个方法在main函数中怎么调用呢?

toFull()方法怎么调用就这么调用了,你如果想添加一个抽象方法再在Food中加一个方法通过FoodImpl来实现具体逻辑,一样的道理。
2 楼 banfry 2010-04-11  
Rice和Noodle的接口中应该还有一个抽象方法,拿什么食品,实现各自的逻辑,不过这个方法在main函数中怎么调用呢?
1 楼 banfry 2010-04-11  
网上桥梁模式的例子很多,一直没看明白,还是lz的这个例子好,一看就明白,终于搞通了,谢谢分享。。。。

相关推荐

    设计模式C++学习之桥梁模式(Bridge)

    设计模式C++学习之桥梁模式(Bridge)

    源码:阎宏设计模式光盘

    com.javapatterns.bridge 桥梁模式 com.javapatterns.builder 建造者模式 com.javapatterns.carp 组合/聚合复用原则 com.javapatterns.chainofresp 责任链模式 com.javapatterns.chainofresp.scheduler 专题:...

    学习php设计模式 php实现桥梁模式(bridge)

    一、桥梁模式结构图   二、桥梁模式中主要角色 抽象化(Abstraction)角色:定义抽象类的接口并保存一个对实现化对象的引用。 修正抽象化(Refined Abstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义...

    java面试800题

    facade门面模式、proxy代理模式、adapter适配器(变压器)模式、composite合成模式、decorator装饰模式、bridge桥梁模式、flyweight享元模式 行为模式 template模板方法模式、memento备忘录模式、observer观察者模式...

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    11、桥梁模式BRIDGE PATTERN 12、命令模式COMMAND PATTERN 13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、...

    C#设计模式.PDF

    六、 在什么情况下应当使用桥梁模式 158 设计模式(17)-Chain of Responsibility Pattern 158 一、 职责链(Chain of Responsibility)模式 160 二、 责任链模式的结构 160 三、 责任链模式的示意性源代码 160 四...

    C#设计模式大全

    六、 在什么情况下应当使用桥梁模式 设计模式(17)-Chain of Responsibility Pattern 一、 职责链(Chain of Responsibility)模式 二、 责任链模式的结构 三、 责任链模式的示意性源代码 四、 纯的与不纯的...

    JAVA设计模式.rar

    策略模式【STRATEGY PATTERN】 ...桥梁模式【BRIDGE PATTERN】  命令模式【COMMAND PATTERN】  装饰模式【DECORATOR PATTERN】 迭代器模式【ITERATOR PATTERN】  组合模式【COMPOSITE PATTERN】 ......

    java设计的4种模式

    如桥梁模式(Bridge Pattern) 定义:Decouple an abstraction from its implementation so that the two can vary independently.(将抽象和实现解耦,使得两者可以独立地变化。) ● Abstraction——抽象化角色 它...

    PHP设计模式(六)桥连模式Bridge实例详解【结构型】

    本文实例讲述了PHP设计模式:桥连模式Bridge。分享给大家供大家参考,具体如下: 1. 概述  在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向...

    C#23种设计模式_示例源代码及PDF

    桥梁模式:将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关 桥梁模式 联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是 继承关系,从而使两者可以独立的...

    bridge-example:马尔马拉大学 OOP 课堂作业 - 桥梁设计模式示例

    桥接示例马尔马拉大学 OOP 课堂作业 - 桥梁设计模式示例

    24个设计模式与6大设计原则

    第 11 章 桥梁模式【BRIDGE PATTERN】 97 第 12 章 命令模式【COMMAND PATTERN】 112 第 13 章 装饰模式【DECORATOR PATTERN】 126 第 14 章 迭代器模式【ITERATOR PATTERN】 137 第 15 章 ...

    google_sdk_android5

    bridge)模式 桥梁模式是一个非常有用的模式,也是比较复杂的一个模式。熟悉这个模式对于理解面向对象的设计原则,包括"开-闭

    java26个设计模式

    桥梁Bridge 不变Immutable 策略Strategy 模版Template 观察者Observer 命令Command 备忘录Memento 状态State 访问者Visitor 解释器Interpreter 调停者Mediator Iterator 责任链Chain of Responsibility

    Bridge-school:桥梁学校网站

    该主题包含几个内容部分,具有悬停效果的响应式投资组合网格,整页投资组合项目模式,响应式时间表和有效PHP联系人表格。 预览 地位 下载及安装 要开始使用此模板,请选择以下选项之一以开始使用: 通过npm安装: ...

    hassio-ring-bridge:家庭助理插件 (Hassio) 充当 Ring API 的桥梁

    家庭助理的环桥,暴露获取/设置位置模式。 Ring 令牌会自动刷新。 该桥接器可用于根据居民的自动存在检测自动设置环形定位模式,从而在家里启用混合传感器和全自动报警系统,例如以下内容。 安装 在 Home Assistant...

    微前端iframe双向通信TS编译npm仓储源码

    2.发送消息时不支持消息的回调,也就是说发布订阅模式,不支持同一条消息的反向通信 综上两个问题给开发造成了很多设计及代码量上的麻烦 利用window对象提供的以上方法,我们做一下简单的封装,能很好地解决以上两...

Global site tag (gtag.js) - Google Analytics