命令模式实现电视遥控器

需求

电视机遥控器之练习题:
• 电视机是请求的接收者,遥控器是请求的发送者,遥控器上有一些按钮, 不同的按钮对应电视机的不同操作。抽象命令角色由一个命令接口来扮 演,有三个具体的命令类实现了抽象命令接口,这三个具体命令类分别 代表三种操作:打开电视机、关闭电视机和切换频道。显然,电视机遥 控器就是一个典型的命令模式应用实例。

类图

在这里插入图片描述

项目结构

在这里插入图片描述

运行截图

在这里插入图片描述

在这里插入图片描述

代码

package command.homeworkTV;
//命令接口
public interface AbstractCommand {
    void execute(String name) throws Exception;
}

package command.homeworkTV;
//请求者
public class Controller implements AbstractCommand {
    AbstractCommand openCommand;
    AbstractCommand closeCommand;
    AbstractCommand changeCommand;

    
    public Controller(AbstractCommand openCommand, AbstractCommand closeCommand, AbstractCommand changeCommand) {
        this.openCommand = openCommand;
        this.closeCommand = closeCommand;
        this.changeCommand = changeCommand;
    }

    @Override
    public void execute(String name) throws Exception {
        System.out.println("execute");

    }

    public void open(String name) throws Exception {
        openCommand.execute(name);
    }

    public void close(String name) throws Exception {
        closeCommand.execute(name);
    }

    public void changeChannel(String name) throws Exception {
        changeCommand.execute(name);
    }
}
package command.homeworkTV;
//接收者
public class Television {
    public void open(String name) {
        System.out.println("打开电视"+name);
    }

    public void close(String name) {
        System.out.println("关闭电视"+name);
    }

    public void changeChannel(String name) {
        System.out.println("换台"+name);
    }
}

package command.homeworkTV;

public class TVOpenCommand implements AbstractCommand {
    Television peopleReceiver;
    public TVOpenCommand(Television peopleReceiver) {
        this.peopleReceiver = peopleReceiver;
    }
    @Override
    public void execute(String name) throws Exception {
        peopleReceiver.open(name);
    }
}

package command.homeworkTV;

public class TVCloseCommand implements AbstractCommand {
    Television peopleReceiver;
    public TVCloseCommand(Television peopleReceiver) {
        this.peopleReceiver = peopleReceiver;
    }
    @Override
    public void execute(String name) throws Exception {
        peopleReceiver.close(name);
    }
}


package command.homeworkTV;

public class TVChangeCommand implements AbstractCommand {
    Television peopleReceiver;
    public TVChangeCommand(Television peopleReceiver) {
        this.peopleReceiver = peopleReceiver;
    }
    @Override
    public void execute(String name) throws Exception {
        peopleReceiver.changeChannel(name);
    }
}


package command.homeworkTV;
public class TestUse {
    public static void main(String args[]) throws Exception{
        //接收者
        Television rec = new Television();
        //命令
        TVOpenCommand createA = new TVOpenCommand(rec);
        TVCloseCommand createB = new TVCloseCommand(rec);
        TVChangeCommand createC = new TVChangeCommand(rec);
        //请求者
        Controller client = new Controller(createA, createB, createC);
        //执行命令
        client.open("海信");
        client.changeChannel("换cctv1");
        client.changeChannel("换cctv9");
        client.close("海信");
        

        //执行命令
        client.open("长虹");
        client.changeChannel("换cctv1");
        client.changeChannel("换cctv9");
        client.close("长虹");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汪程序猿

就当请我吃顿饭

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值