设计模式之命令模式(java)实例——电视机遥控器

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

参考类图:
在这里插入图片描述

二、主要代码:

public interface AbstractCommand {
    void execute();
}
public  abstract class Command {
    public abstract void execute();
}
public class ConcreteCommand extends Command{

    private Receiver receiver;
    @Override
    public void execute() {
        receiver.action();
    }
}

public class Controller {
    private AbstractCommand openCommand,closeCommand,changeCommand;

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

    public void open() {
        openCommand.execute();
    }

    public void change() {
        changeCommand.execute();
    }

    public void close() {
        closeCommand.execute();
    }
}

public class Invoker {
    private Command command;

    public Invoker(Command command){
        this.command = command;
    }

    public void setCommand(Command command){
        this.command = command;
    }

    public void call(){
        command.execute();
    }
}

public class Receiver {
    public void action(){

    }
}

public class Television
{
    public void open() {
        System.out.println("----------打--开--电--视--机----------");
    }

    public void close() {
        System.out.println("----------关--闭--电--视--机----------");
    }

    public void changeChannel() {
        System.out.println("----------更--改--频--道----------");
    }
}


public class TVChangeCommand implements AbstractCommand{

    private Television tv;

    public TVChangeCommand(){
        tv = new Television();
    }

    @Override
    public void execute() {
        tv.changeChannel();//更改频道
    }
}
public class TVCloseCommand implements AbstractCommand{

    private Television tv;

    public TVCloseCommand(){
        tv = new Television();
    }
    @Override
    public void execute() {
        tv.close();//关闭电视机
    }
}
public class TVOpenCommand implements AbstractCommand{

    private Television tv;
    public TVOpenCommand(){
        tv = new Television();
    }
    @Override
    public void execute() {
        tv.open();//打开电视机
    }
}

测试类:

public class Client {
    public static void main(String[] args) {
        AbstractCommand openCommand,closeCommand,changeCommand;

        openCommand = new TVOpenCommand();
        closeCommand = new TVCloseCommand();
        changeCommand = new TVChangeCommand();

        Controller control = new Controller(openCommand,closeCommand,changeCommand);

        control.open();
        control.change();
        control.close();

    }
}

三、运行结果:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值