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

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();
    }
}

相关推荐

  1. 设计模式

    2024-04-21 00:54:01       23 阅读
  2. 设计模式模式

    2024-04-21 00:54:01       33 阅读
  3. 设计模式——模式

    2024-04-21 00:54:01       35 阅读
  4. 设计模式-模式

    2024-04-21 00:54:01       31 阅读
  5. 设计模式-模式

    2024-04-21 00:54:01       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-21 00:54:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-21 00:54:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-21 00:54:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-21 00:54:01       20 阅读

热门阅读

  1. Spark面试整理-Spark集成Hive

    2024-04-21 00:54:01       15 阅读
  2. 4月20日,每日信息差

    2024-04-21 00:54:01       13 阅读
  3. Python框架django项目

    2024-04-21 00:54:01       15 阅读
  4. oepncv android 使用笔记

    2024-04-21 00:54:01       13 阅读
  5. 使用leaflet给地图添加蒙版(超级详细免费看)

    2024-04-21 00:54:01       14 阅读
  6. 个人开发者,Spring Boot 项目如何部署

    2024-04-21 00:54:01       14 阅读
  7. HttpServletResponse HttpServletRequest

    2024-04-21 00:54:01       11 阅读
  8. WPF: XAML语法规范详解

    2024-04-21 00:54:01       13 阅读
  9. 缓存之SpringCache整合redis

    2024-04-21 00:54:01       14 阅读