`
cakin24
  • 浏览: 1395313 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

桥接模式——开关和电灯照明

阅读更多

一模式定义

桥接模式,也称桥梁模式,在软件系统中,由于自身的逻辑,具有两个或多个维度的变化,如何应对这种多维度的变化,桥接模式使得软件系统能够轻松地沿着多个方向进行变化,而又不引入额外的复杂度。

桥接模式三个关键词为:抽象化,实现化,脱耦

 

二模式举例

1 桥接模式分析方法

我们借用电灯照明来说明该模式。

不使用继承,使用对象组合的方式,将开关和电灯的强关联关系变成弱关联关系。

2桥接模式静态类模型



 

3代码示例

3.1创建电灯接口

package com.demo.bridge.lights;

/**
 * 电灯接口
 * 
 * @author
 * 
 */
public interface ILight
{
	// 接通电流
	public void electricConnected();

	// 照明
	public void light();

	// 电流关闭
	public void electricClosed();

}

 3.2创建一般开关

package com.demo.bridge.switchs;

import com.demo.bridge.lights.ILight;

/**
 * 开关顶层类
 * 
 * @author
 * 
 */
public class BaseSwitch {
	// 使用组合 设置ILight为内部私有属性 此为桥梁
	protected ILight light;

	// 构造方法将 外部的light类型注入进来
	public BaseSwitch(ILight light) {
		this.light = light;
	}

	/**
	 * 开灯方法
	 */
	public final void makeLight() {
		// 打开开关 接通电流
		this.light.electricConnected();
		// 照明
		this.light.light();
		// 关闭开关 关闭电流
		this.light.electricClosed();
	}
}

 3.3创建遥控开关

package com.demo.bridge.switchs.sub;

import com.demo.bridge.lights.ILight;
import com.demo.bridge.switchs.BaseSwitch;

/**
 * 遥控开关 继承BaseSwitch 扩展功能
 * 
 * @author
 * 
 */
public class RemoteControlSwitch extends BaseSwitch
{
	// 构造方法
	public RemoteControlSwitch(ILight light)
	{
		super(light);
	}

	/**
	 * 使用遥控开关控制开灯
	 * 
	 * @param operColor
	 *            灯颜色
	 */
	public final void makeRemoteLight(int operColor)
	{
		// 打开开关 接通电流
		this.light.electricConnected();
		// 照明
		this.light.light();
		String color = "";
		switch (operColor)
		{
			case 1:
				color = "暖色";
				break;
			case 2:
				color = "蓝色";
				break;
			case 3:
				color = "红色";
				break;
			default:
				color = "白色";
				break;
		}
		System.out.println(" ...现在是" + color + "!");

		// 关闭开关 关闭电流
		this.light.electricClosed();
	}
}

 3.4白炽灯实现

package com.demo.bridge.lights.impl;

import com.demo.bridge.lights.ILight;

/**
 * 白炽灯 实现
 * 
 * @author
 * 
 */
public class IncandescentLight implements ILight
{
	// 电流关闭
	public void electricClosed()
	{
		System.out.println("白炽灯被关闭了...");

	}

	// 接通电流
	public void electricConnected()
	{
		System.out.println("白炽灯被打开了...");
	}

	// 照明
	public void light()
	{
		System.out.println("白炽灯照明!");

	}

}

 3.5水晶灯实现

package com.demo.bridge.lights.impl;

import com.demo.bridge.lights.ILight;

/**
 * 水晶灯 实现
 * 
 * @author
 * 
 */
public class CrystalLight implements ILight
{
	// 电流关闭
	public void electricClosed()
	{
		System.out.println("水晶灯被关闭了...");

	}

	// 接通电流
	public void electricConnected()
	{
		System.out.println("水晶灯被打开了...");

	}

	// 照明
	public void light()
	{
		System.out.println("水晶灯照明!");

	}

}

 3.6一般开关控制白炽灯,遥控开关控制水晶灯

package com.demo;

import com.demo.bridge.lights.ILight;
import com.demo.bridge.lights.impl.CrystalLight;
import com.demo.bridge.lights.impl.IncandescentLight;
import com.demo.bridge.switchs.BaseSwitch;
import com.demo.bridge.switchs.sub.RemoteControlSwitch;

/**
 * 客户端应用程序
 * 
 * @author
 * 
 */
public class ClientForBridge {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// 白炽灯 实例
		ILight incandescentLight = new IncandescentLight();
		// 水晶灯 实例
		ILight crystalLight = new CrystalLight();

		// 一般开关
		System.out.println("-- 一般开关 -- ");
		BaseSwitch switch1 = new BaseSwitch(incandescentLight);
		switch1.makeLight();
		System.out.println("\n-- 遥控开关 -- ");
		// 遥控开关
		RemoteControlSwitch remoteControlSwitch = new RemoteControlSwitch(
				crystalLight);
		remoteControlSwitch.makeRemoteLight(1);
	}
}

 运行结果:

-- 一般开关 -- 

白炽灯被打开了...

白炽灯照明!

白炽灯被关闭了...

 

-- 遥控开关 -- 

水晶灯被打开了...

水晶灯照明!

 ...现在是暖色!

水晶灯被关闭了...

3.7一般开关控制水晶灯,遥控开关控制白炽灯

package com.demo;

import com.demo.bridge.lights.ILight;
import com.demo.bridge.lights.impl.CrystalLight;
import com.demo.bridge.lights.impl.IncandescentLight;
import com.demo.bridge.switchs.BaseSwitch;
import com.demo.bridge.switchs.sub.RemoteControlSwitch;

/**
 * 客户端应用程序
 * 
 * @author
 * 
 */
public class ClientForBridge {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// 白炽灯 实例
		ILight incandescentLight = new IncandescentLight();
		// 水晶灯 实例
		ILight crystalLight = new CrystalLight();

		// 一般开关
		System.out.println("-- 一般开关 -- ");
		BaseSwitch switch1 = new BaseSwitch(crystalLight);
		switch1.makeLight();
		System.out.println("\n-- 遥控开关 -- ");
		// 遥控开关
		RemoteControlSwitch remoteControlSwitch = new RemoteControlSwitch(
				incandescentLight);
		remoteControlSwitch.makeRemoteLight(1);
	}
}

 运行结果

-- 一般开关 -- 

水晶灯被打开了...

水晶灯照明!

水晶灯被关闭了...

 

-- 遥控开关 -- 

白炽灯被打开了...

白炽灯照明!

 ...现在是暖色!

白炽灯被关闭了...

 

三设计原则

1 尽量使用对象聚合弱关联,避免使用继承强关联。

2 抽象化和实现化脱耦。

 

四使用场合

1不希望在抽象类和实现部分之间有一个固定的绑定关系

2类的抽象及实现部分都应该可以通过孑类的方法加以扩充

3对一个抽象的实现部分的修改对客户不产生影响,即客户代码不必重新编译

五桥接模式静态类图



 

  • 大小: 21 KB
  • 大小: 32.6 KB
分享到:
评论

相关推荐

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

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

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

    桥接模式的核心思想是通过引入一个抽象层来将抽象类和它的实现类解耦,使得它们可以独立地进行演化。 在桥接模式中,有四个主要的角色: 1. 抽象接口(Abstraction):定义了抽象类的接口,通常包含对实现类的引用...

    设计模式---桥接模式

    - 可能还包含了一些测试类或示例代码,用于展示如何使用桥接模式来创建和操作对象。 通过使用桥接模式,我们可以做到: 1. 分离抽象和实现:抽象部分和实现部分可以独立进行扩展,降低了代码的耦合度。 2. 支持多...

    ADSL桥接模式和路由模式的区别

    "ADSL 桥接模式和路由模式的区别" 在 ADSL 宽带接入方式中,桥接模式和路由模式是两种常见的工作模式。_bridge 模式是 ADSL ROUTER 的默认工作模式,主要用于单台电脑的接入,需要代理服务器或网关设备将局域网中的...

    如何向妻子解释OOD和设计模式——桥接模式

    而《如何向妻子解释设计模式》虽然只涉及了桥接模式,但也会以通俗易懂的方式介绍其工作原理和应用场景,可能通过一个生活中的故事来展示如何在实际问题中应用桥接模式。 通过阅读这两篇文档,即使是对编程不熟悉的...

    VMWare 6.0桥接模式虚拟机网络配置

    VMWare 6.0 桥接模式虚拟机网络配置 ...VMWare 6.0 桥接模式虚拟机网络配置是一种简单而又重要的网络连接模式,通过正确的配置,可以让虚拟机正常地连接到网络中,并且可以与主机和其他虚拟机进行通信。

    桥接模式 C++ 实现

    总结来说,桥接模式是一种结构型设计模式,通过将抽象和实现解耦,使得两者可以独立发展。在C++中,我们可以利用类的继承和接口来实现这一模式,从而提高代码的可扩展性和可维护性。在实际项目中,尤其是在需要处理...

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

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

    设计模式之桥接模式BridgePattern

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

    设计模式之桥接模式

    桥接模式的核心思想是通过引入一个抽象层,将抽象类和它的实现类进行分离,抽象类不直接依赖于具体的实现,而是通过一个接口或者抽象类引用实现类。这样做的好处是可以让抽象类和实现类独立发展,不会因为一方的改变...

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

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

    桥接模式-设计模式

    总结起来,桥接模式是一种有效的设计模式,用于处理对象之间的多维度可变性问题,它通过分离抽象和实现,提高了系统的灵活性和可扩展性,降低了代码的维护成本。在实际开发中,尤其是在面临复杂需求变化的项目中,...

    VMware15虚拟机桥接模式无法上网问题的解决

    VMware 15虚拟机桥接模式无法上网问题 步骤 1:在设置中找到 网络和internet—>>更改适配器选项—–>>以太网 查看 共享网络给虚拟机(有些电脑不用) 步骤2:查看VMware虚拟网络编辑器的VMnet0桥接模式设置 ...

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

    在C#编程中,桥接模式的应用能够帮助我们更好地解耦系统,提高代码的灵活性和可扩展性。 在C#中,面向对象设计模式通常用于解决复杂度问题,桥接模式则是一种更为高级的设计策略。它通过引入一个抽象接口,将抽象类...

    Android桥接模式demo

    **Android桥接模式详解** 桥接模式是一种设计模式,它将抽象部分与实现...通过`ImplementorDemo`的例子,我们可以看到如何使用桥接模式来分离动画效果的抽象和实现,使其能独立变化,从而实现更加灵活的动画管理系统。

    设计模式 - 桥接模式

    桥接模式的主要组成部分包括抽象部分(Abstraction)、具体抽象部分(Concrete Abstraction)、实现部分(Implementation)和具体实现部分(Concrete Implementation)。以下是这些角色的详细解释: 1. 抽象部分...

    桥接模式例子源码

    在这个例子源码中,我们可以深入理解桥接模式的原理和应用。 桥接模式的核心思想是将抽象类和实现类解耦,通过一个接口或者抽象类将两者关联起来。在具体实现中,通常会有一个抽象基类(BridgePatternBase),它...

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

    但使用桥接模式,我们可以将形状和填充方式作为独立的组件: - 抽象部分(Abstraction):定义一个图形接口,包含绘制图形的方法。 - 扩展抽象部分(Refined Abstraction):实现图形接口,例如具体圆形类和具体...

    桥接模式和装饰模式,设计模式实验报告,BlueJ

    桥接模式和装饰模式,设计模式实验报告,BlueJ

Global site tag (gtag.js) - Google Analytics