`
zddava
  • 浏览: 243680 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

了解设计模式 之 结构模式(二) -- 桥接模式

阅读更多
2. 桥接模式(Bridge)

桥接模式是一种很有意思的模式,它的结构确实像一座桥一样,与桥相连的两端都可以各自独立的变化,让一组实现与另外一组使用它们的对象分离。我们可以举个例子来说明:

还是回到先前的方便面厂那个例子,还是要构建一个生产北京,杭州两种地方口味的方便面,同样是牛肉面也就有了北京口味的牛肉面和杭州口味的牛肉面,西红柿打卤面也分北京口味和杭州口味之分。这里为了便于理解,口味上这样区分,北京口味的盐稍微多些,有少许辣味;杭州口味的稍微少些,有少许甜味。

好了,开始实现这个整体结构吧。

首先是方便面工厂的抽象基类:

	// 这里和工厂模式没有关系哦
	// 方便面工厂
	public abstract class InstantNoodleFactory {
		protected Implementer impl = null;

		public void setImpl(Implementer impl) {
			this.impl = impl;
		}

		public abstract void produce();

	}


这里的Implementer就是InstantNoodleFactory使用的一组实现类的基接口,正是InstantNoodleFactory和Implementer实现了"桥接"。

下面看一下Implementer:

	public interface Implementer {
		
		// 加入地方特色的口味
		public void addDistrictTaste();
	}


这个类负责实现不同地方口味的实现,我们来实现两个它的子类

	public class BeijingImplementer implements Implementer {

		@Override
		public void addDistrictTaste() {
			System.out.println("加入稍多的盐");
			System.out.println("加入微量辣味");
		}
	}

	public class HangzhouImplementer implements Implementer {

		@Override
		public void addDistrictTaste() {
			System.out.println("加入稍少的盐");
			System.out.println("加入微量甜味");
		}
	}


这两个类分别实现了两种不同的地方口味。

最后来看看方便面抽象工厂的实现,它使用了Implementer类,并且它不去关心到底实现Implementer的是什么类

	// 牛肉面工厂
	public class BeefInstantNoodleFactory extends InstantNoodleFactory {

		@Override
		public void produce() {
			prepare();

			// 加入地方口味
			this.impl.addDistrictTaste();
		}

		private void prepare() {
			System.out.println("准备制作牛肉面");
		}

	}


这样,通过这种结构,实现了牛肉面工厂与地方口味的解耦,只要更换了Implementer的实现,就可以在不同的地方口味中切换了。这样就大大的减少了类的数量,要生产带有地方口味的牛肉面也不用出现BeijingBeefInstantNoodleFactory,HangzhouBeefInstantNoodleFactory这样的类了。

最后是一个客户端:

	public class Client {

		public static void main(String[] args) {
			// 北京口味
			Implementer impl = new BeijingImplementer();

			// 制造牛肉面
			InstantNoodleFactory fac = new BeefInstantNoodleFactory();

			// 设定北京口味
			fac.setImpl(impl);
			// 生产
			fac.produce();

			// 杭州口味
			impl = new HangzhouImplementer();

			// 设定杭州口味
			fac.setImpl(impl);
			// 生产
			fac.produce();
		}

	}


桥接模式将抽象部分与它的实现部分分离,使它们都可以独立地变化。它的类图如下所示:


桥接模式可以用于当一个接口或抽象类的继承结构中出现了某些概念上的重复时,比如上面的例子中就出现了"北京口味牛肉面","杭州口味牛肉面"等等,这里就出现了"牛肉"这个概念的重复,这是就可以使用桥接模式来分拆接口了,分成抽象和实现两个部分。
  • 大小: 17.3 KB
分享到:
评论

相关推荐

    设计模式---桥接模式

    桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立进行变化。这种模式在软件工程中被广泛应用于处理组件之间的耦合问题,特别是当需要为同一抽象提供多种实现或者需要独立地改变它们时。 ...

    JAVA-设计模式-结构型模式-桥接模式

    JAVA-设计模式-结构型模式-桥接模式

    设计模式专题之(十)桥接模式---设计模式桥接模式示例代码(python--c++)

    桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立进行变化。这种模式在软件设计中常用于降低复杂性,特别是在系统中存在多种可变因素时,通过解耦抽象和实现,可以使得两者各自独立发展,...

    c++设计模式-结构型模式-桥接模式

    c++设计模式-结构型模式-桥接模式;qt工程,c++简单源码; 桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度...

    设计模式 - 桥接模式

    桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立进行变化。这种模式在软件工程中被广泛应用于处理组件之间的耦合问题,使得系统具有更好的可扩展性和灵活性。 桥接模式的主要组成部分...

    桥接模式-设计模式

    桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立进行变化。这种模式在软件设计中扮演着重要的角色,尤其是在面对需求频繁变动或系统需要支持多平台、多设备的情况下。 首先,我们要理解...

    设计模式面面观(10):桥接模式(Bridge Pattern)-结构型模式

    创建型模式 (100%) 设计模式面面观(8):创建型模式总结 (100%) 设计模式面面观(9):适配器模式(Adapter Pattern)-结构型模式 (100%) 设计模式面面观(10):桥接模式(Bridge Pattern)-结构型模式 ...

    设计模式 - 桥接模式(C++实例)

    桥接模式是一种结构型设计模式,它将抽象部分与其实现部分分离,使得它们可以独立地进行变化。在C++编程中,桥接模式能够帮助我们设计出更灵活、可扩展的系统,允许我们在不修改原有代码的基础上更换或增加新的实现...

    设计模式之桥接模式,内含可运行代码

    桥接模式是软件设计模式中的一种结构型模式,它的主要目的是为了实现抽象和实现的解耦,使得两者可以独立地进行扩展。在桥接模式中,抽象类(Abstraction)不直接引用具体实现(Implementation),而是通过一个桥接...

    设计模式的桥接模式的例子

    桥接模式是设计模式中的一种结构型模式,它旨在将抽象部分与实现部分解耦,使得它们可以独立地变化。这种模式将抽象类和它的实现类进行分离,通过一个抽象接口来连接它们,使得两者可以独立发展,增加了系统的灵活性...

    设计模式之桥接模式

    桥接模式(Bridge Pattern)是设计模式中结构型模式的一种,它的主要目的是将抽象部分与实现部分解耦,使得它们可以独立地进行变化。在Java编程中,这种模式的应用可以帮助我们构建更加灵活、可扩展的代码结构。 ...

    Bridge 桥接模式(结构型模式)

    桥接模式(Bridge Pattern)是一种结构型设计模式,它的主要目的是将抽象部分与实现部分分离,使得它们可以独立地进行变化。在软件工程中,这种分离有助于降低复杂性,提高代码的可维护性和可扩展性。桥接模式的核心...

    设计模式-桥接模式(讲解及其实现代码)

    桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立进行变化。这种模式在软件设计中常用于降低系统的耦合度,使得类的扩展和维护更为方便。 首先,我们理解桥接模式的核心概念。在桥接模式...

    设计模式之桥接模式BridgePattern

    桥接模式(Bridge Pattern)是设计模式中的一种结构型模式,它主要解决的是在软件设计中,当抽象和实现之间存在紧密耦合时,如何使这两者能够独立地变化。这种模式通过引入一个抽象层来分离接口和实现,使得它们可以...

    C#面向对象设计模式纵横谈(8):Bridge 桥接模式(结构型模式)

    桥接模式(Bridge Pattern)是面向对象设计中的一种结构型模式,它将抽象部分与实现部分分离,使得它们可以独立地进行变化。在C#编程中,桥接模式的应用能够帮助我们更好地解耦系统,提高代码的灵活性和可扩展性。 ...

    24设计模式-桥接模式1

    桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地进行变化。在软件工程中,这种模式对于处理有多种实现方式的抽象概念非常有用,可以降低系统的耦合度,提高模块间的独立性,使得代码更...

    桥接模式和策略模式的区别,内含可运行代码和两者详细区别

    桥接模式和策略模式是软件设计模式中的两种重要模式,它们在实现上有着相似之处,但各自的应用场景和设计理念有所不同。下面将详细阐述这两种模式的特点、区别以及它们在实际编程中的应用。 首先,桥接模式(Bridge...

    设计模式11桥接模式

    ### 设计模式11桥接模式 #### 模式动机 桥接模式是解决系统中存在多维度变化问题的一种有效手段。例如,在图形绘制场景中,假设需要绘制不同形状(如矩形、圆形、椭圆、正方形)并赋予它们不同的颜色(如红色、...

    结构型模式之桥接模式(bridge)

    桥接模式是设计模式中的一种结构型模式,其主要目的是为了分离抽象部分和实现部分,以便两者能够独立地进行变化。这种模式的核心理念是通过引入一个抽象层来封装多种可能的实现,使得抽象和实现之间形成一种“桥接”...

Global site tag (gtag.js) - Google Analytics