首页 > 编程 > Java > 正文

Java使用桥接模式实现开关和电灯照明功能详解

2019-11-26 09:59:34
字体:
来源:转载
供稿:网友

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

一、模式定义

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

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

二、模式举例

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

五、桥接模式静态类图

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表