设计模式代码实战-桥接模式

server/2024/10/20 15:45:26/

1、问题描述

小明家有一个万能遥控器,能够支持多个品牌的电视。每个电视可以执行开机、关机和切换频道的操作,请你使用桥接模式模拟这个操作。

输入示例
6
0 2
1 2
0 4
0 3
1 4
1 3

输出示例
Sony TV is ON
TCL TV is ON
Switching Sony TV channel
Sony TV is OFF
Switching TCL TV channel
TCL TV is OFF

2、桥接模式

它通过将【抽象部分】与【实现部分】分离,使它们可以独⽴变化,从⽽达到降低系统耦合度的⽬的。桥接模式的主要⽬的是通过组合建⽴两个类之间的联系,⽽不是继承的⽅式。

作者认为和代理模式类似,只是目的不同,模式的名称不同,其中有一个类保存了扩展类的引用,实现扩展功能的目的
请添加图片描述

3、代码

import com.sun.java.accessibility.util.TopLevelWindowListener;import java.util.*;public class Main{public static void main(String[] args){Scanner sc=new Scanner(System.in);int number=sc.nextInt();for(int i=0;i<number;i++){int a=sc.nextInt();int b=sc.nextInt();if(a==0){Television t=new SonyTV();UniversalRemoteControl u=new UniversalRemoteControl(t);if(b==2){u.ControlOn();}else if(b==3){u.ControlOff();}else if(b==4){u.ControlchangeChannel();}}else if(a==1){Television t=new TCLTV();UniversalRemoteControl u=new UniversalRemoteControl(t);if(b==2){u.ControlOn();}else if(b==3){u.ControlOff();}else if(b==4){u.ControlchangeChannel();}}}}
}interface Television{void turnON();void turnOFF();void turnChannel();
}class SonyTV implements Television{@Overridepublic void turnON() {System.out.println("Sony TV is ON");}@Overridepublic void turnOFF() {System.out.println("Sony TV is OFF");}@Overridepublic void turnChannel() {System.out.println("Switching Sony TV channel");}
}class TCLTV implements Television{@Overridepublic void turnON() {System.out.println("TCL TV is ON");}@Overridepublic void turnOFF() {System.out.println("TCL TV is OFF");}@Overridepublic void turnChannel() {System.out.println("Switching TCL TV channel");}
}abstract class RemoteControl{protected   Television television;public RemoteControl(Television t){this.television=t;}abstract void ControlOn();abstract void ControlOff();abstract void ControlchangeChannel();}class UniversalRemoteControl extends RemoteControl{public UniversalRemoteControl(Television t){super(t);}@Overridevoid ControlOn() {television.turnON();}@Overridevoid ControlOff() {television.turnOFF();}@Overridevoid ControlchangeChannel() {television.turnChannel();}
}

http://www.ppmy.cn/server/4936.html

相关文章

命令模式:将请求封装为对象

在软件工程中&#xff0c;设计模式是解决常见问题的成熟模板。命令模式&#xff08;Command Pattern&#xff09;是这些设计模式之一&#xff0c;它属于行为型模式&#xff0c;用于将一个请求封装为一个对象&#xff0c;从而允许用户使用不同的请求、队列或日志请求来参数化其他…

Redis:发布和订阅

文章目录 一、介绍二、发布订阅命令 一、介绍 Redis的发布和订阅功能是一种消息通信模式&#xff0c;发送者&#xff08;pub&#xff09;发送消息&#xff0c;订阅者&#xff08;sub&#xff09;接收消息。这种功能使得消息发送者和接收者不需要直接建立连接&#xff0c;而是通…

ArcGIS加载的各类地图怎么去除服务署名水印

昨天介绍的&#xff1a; 一套图源搞定&#xff01;清新规划底图、影像图、境界、海洋、地形阴影图、导航图-CSDN博客文章浏览阅读373次&#xff0c;点赞7次&#xff0c;收藏11次。一体化集成在一起的各类型图源&#xff0c;比如包括影像、清新的出图底图、地形、地图阴影、道路…

【Linux】提升Linux命令行效率:光标移动和文本操作的键盘快捷键

Just 那么年少 还那么骄傲 两眼带刀 不肯求饶 即使越来越少 即使全部都输掉 也要没心没肺地笑 Just 那么年少 我向你招手 让你看到 我混账到老 天涯海角 天荒地老 只等你摔杯为号 &#x1f3b5; 朴树《Forever Young》 Linux命令行界面&#xff08;CLI&am…

英伟达大跳水!一夜暴跌10%,市值蒸发2000亿

相信大家已经在各大社交平台上看到了&#xff0c;英伟达一夜蒸发了2000亿美元&#xff01; GPT-3.5研究测试&#xff1a; https://hujiaoai.cn GPT-4研究测试&#xff1a; https://higpt4.cn Claude-3研究测试&#xff08;全面吊打GPT-4&#xff09;&#xff1a; https://hic…

Swift文件与IO操作

在Swift中&#xff0c;我们可以通过文件路径或URL进行文件的读写操作。文件路径是文件在文件系统中的位置&#xff0c;可以是绝对路径或相对路径。URL是统一资源定位符&#xff0c;可以指向本地文件或远程资源。 从文件路径或URL获取文件内容&#xff1a; let filePath "…

http 3.0 有哪些新特性

HTTP/3 是超文本传输协议&#xff08;HTTP&#xff09;的最新主要版本&#xff0c;其显著特点是放弃了传统的TCP作为传输层协议&#xff0c;转而采用基于UDP的QUIC&#xff08;Quick UDP Internet Connections&#xff09;协议。以下是HTTP/3利用QUIC实现高性能传输的关键特性&…

ChatGPT:携手完成功能论文写作

ChatGPT无限次数:点击直达 ChatGPT&#xff1a;携手完成功能论文写作 随着人工智能技术的发展&#xff0c;如今我们已经能够利用先进的自然语言处理模型来辅助我们进行论文写作。ChatGPT作为其中一款非常强大的语言生成模型&#xff0c;为我们提供了许多便利&#xff0c;帮助我…