ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

桥接模式

2021-07-30 23:34:54  阅读:132  来源: 互联网

标签:桥接 void System 模式 Override device println public



title: 桥接模式
date: 2021-07-30 21:45:40
tags:

  • 设计模式
    categories:
  • 程序设计基础

桥接模式

概述

可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构,从而能在开发时分别使用。

  • 抽象化角色:定义抽象类,包含一个对实现化对象的引用。
  • 扩展抽象化画角色:抽象化角色的子类,实现父类中的业务方法,通过组合关系调用实现化角色中的业务方法。
  • 实现化角色:定义实现化角色的接口,供扩展抽象化角色调用
  • 具体实现化角色:给出实现化角色接口的具体实现。

场景

某户人家买了一个小米精灵,想把已经有的电视,电灯等电器接入到小米精灵中,使小米精灵成为一个终端,各自的遥控器小米精灵达到控制各自电器的功能。

实现

// 抽象化角色 遥控器类
public abstract class Control {

    protected Device device;

    public Control(Device device) {
        this.device = device;
    }

    public abstract void up();

    public abstract void down();

    public abstract void turnOn();

    public abstract void turnOff();

}

// 扩展抽象化画角色
public class AudioControl extends Control {

    public AudioControl(Device device) {
        super(device);
    }

    @Override
    public void up() {
        if (device.isEnable()) {
            device.setNumber(device.getNumber() + 1);
            System.out.println("调高声音,现在是"+device.getNumber());
        }
    }

    @Override
    public void down() {
        if (device.isEnable()) {
            device.setNumber(device.getNumber() - 1);
            System.out.println("调低声音,现在是"+device.getNumber());
        }
    }

    @Override
    public void turnOn() {
        device.enable();
        device.setNumber(60);
        System.out.println("开机");
    }

    @Override
    public void turnOff() {
        device.disable();
        System.out.println("关机");
    }
}

public class ConditionControl extends Control {

    public ConditionControl(Device device) {
        super(device);
    }

    @Override
    public void up() {
        if (device.isEnable()) {
            device.setNumber(device.getNumber() + 1);
            System.out.println("调高温度,现在是" + device.getNumber());
        }
    }

    @Override
    public void down() {
        if (device.isEnable()) {
            device.setNumber(device.getNumber() - 1);
            System.out.println("调低温度,现在是" + device.getNumber());
        }
    }

    @Override
    public void turnOn() {
        device.enable();
        device.setNumber(25);
        System.out.println("开空调");
    }

    @Override
    public void turnOff() {
        device.disable();
        System.out.println("关空调");
    }
}

// 实现化角色
public interface Device {

    boolean isEnable();

    void enable();

    void disable();

    int getNumber();

    void setNumber(int num);

}

// 具体实现化角色
public class Audio implements Device {

    private boolean status;
    private int number;

    @Override
    public boolean isEnable() {
        return status;
    }

    @Override
    public void enable() {
        System.out.println("音响开机了");
        this.status = true;
    }

    @Override
    public void disable() {
        System.out.println("音响关机了");
        this.status = false;
    }

    @Override
    public int getNumber() {
        System.out.println("现在是" + number + "音量大小");
        return this.number;
    }

    @Override
    public void setNumber(int num) {
        System.out.println("已设置音量为" + num);
        this.number = num;
    }
}


public class AirCondition implements Device {

    private boolean status;
    private int number;

    @Override
    public boolean isEnable() {
        return status;
    }

    @Override
    public void enable() {
        System.out.println("空调开机了");
        this.status = true;
    }

    @Override
    public void disable() {
        System.out.println("空调关机了");
        this.status = false;
    }

    @Override
    public int getNumber() {
        System.out.println("现在是" + number + "温度");
        return this.number;
    }

    @Override
    public void setNumber(int num) {
        System.out.println("已设置温度为" + num);
        this.number = num;
    }
}

总结

  1. 面向对象编程,面对抽象编程
  2. 相同维度是否可以聚合成为一个类
  3. 需要在运行时切换不同的实现方法,通过切换抽象部分中的实现类来实现。
  4. 开闭原则,单一职责原则。
  5. 缺点是代码复杂度增加。

标签:桥接,void,System,模式,Override,device,println,public
来源: https://www.cnblogs.com/jimmyhe/p/15082898.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有