Java字灯串自编号J001_Java使用桥接模式实现开关和电灯照明功能详解

本文实例讲述了Java使用桥接模式实现开关和电灯照明功能。分享给大家供大家参考,具体如下:

一、模式定义

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

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

二、模式举例

1 桥接模式分析方法

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

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

2 桥接模式静态类模型

8a09ba7f76aff0ea35958734b9b5bae7.png

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 对一个抽象的实现部分的修改对客户不产生影响,即客户代码不必重新编译

五、桥接模式静态类图

e192fdfeb8a5b4e13d7a9b9306187fe1.png

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

时间: 2018-05-16

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值