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

本文介绍了如何使用Java编程实现一个万能遥控器,通过桥接模式将抽象的电视操作与具体的品牌电视分离,以降低系统耦合。通过UniversalRemoteControl类,根据用户输入控制SonyTV和TCLTV的开关和频道切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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{

    @Override
    public void turnON() {
        System.out.println("Sony TV is ON");
    }

    @Override
    public void turnOFF() {
        System.out.println("Sony TV is OFF");
    }

    @Override
    public void turnChannel() {
        System.out.println("Switching Sony TV channel");
    }
}

class TCLTV implements Television{

    @Override
    public void turnON() {
        System.out.println("TCL TV is ON");
    }

    @Override
    public void turnOFF() {
        System.out.println("TCL TV is OFF");
    }

    @Override
    public 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);
    }
    @Override
    void ControlOn() {
        television.turnON();
    }

    @Override
    void ControlOff() {
        television.turnOFF();
    }

    @Override
    void ControlchangeChannel() {
        television.turnChannel();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值