package com.eric.行为型模式.命令模式.command;
/**
* @author Eric
* @ProjectName my_design_23
* @description 命令接口
* @CreateTime 2020-12-07 08:38:51
*/
public interface Command {
//执行命令的方法
public void execute();
}
package com.eric.行为型模式.命令模式.command;
/**
* @author Eric
* @ProjectName my_design_23
* @description 命令接口
* @CreateTime 2020-12-07 08:38:51
*/
public interface Command {
//执行命令的方法
public void execute();
}
package com.eric.行为型模式.命令模式.role;
/**
* @author Eric
* @ProjectName my_design_23
* @description 行动方法
* @CreateTime 2020-12-07 08:40:19
*/
public class Receiver {
//行动方法
public void action(){
System.out.println("收到命令,执行动作");
}
}
package com.eric.行为型模式.命令模式.role;
import com.eric.行为型模式.命令模式.command.Command;
/**
* @author Eric
* @ProjectName my_design_23
* @description 调用者
* @CreateTime 2020-12-07 08:43:00
*/
public class Invoker {
private Command command;
//接收命令
public void setCommand(Command command){
this.command = command;
}
//执行命令
public void action()
{
this.command.execute();
}
}
package com.eric.行为型模式.命令模式;
import com.eric.行为型模式.命令模式.command.Command;
import com.eric.行为型模式.命令模式.command.ConcreteCommand;
import com.eric.行为型模式.命令模式.role.Invoker;
import com.eric.行为型模式.命令模式.role.Receiver;
/**
* @author Eric
* @ProjectName my_design_23
* @description 测试类
* @CreateTime 2020-12-07 08:45:20
*/
public class Client {
public static void main(String[] args) {
//调用者
Invoker invoker = new Invoker();
//接收者
Receiver receiver = new Receiver();
//定义一个发送给接收者的命令
Command command = new ConcreteCommand(receiver);
//执行
invoker.setCommand(command);
invoker.action();
}
}
收到命令,执行动作
package com.eric.行为型模式.命令模式.例1.command;
/**
* @author Eric
* @ProjectName my_design_23
* @description 抽象命令角色
* @CreateTime 2020-12-07 14:43:37
*/
//抽象命令接口
public interface MyCommand {
public void execute();
}
package com.eric.行为型模式.命令模式.例1.command;
import javax.swing.*;
import java.awt.*;
/**
* @author Eric
* @ProjectName my_design_23
* @description 黄色实现类
* @CreateTime 2020-12-07 14:46:21
*/
//具体命令角色,让面板变为黄色的命令
public class YellowCommand extends JButton implements MyCommand {
private JPanel panel;
//构造函数
public YellowCommand(String name,JPanel panel)
{
//构造一个按钮控件
super(name);
this.panel = panel;
}
@Override
public void execute() {
//改变面板的背景颜色
panel.setBackground(Color.YELLOW);
}
}
package com.eric.行为型模式.命令模式.例1.command;
import javax.swing.*;
import java.awt.*;
/**
* @author Eric
* @ProjectName my_design_23
* @description 红色命令
* @CreateTime 2020-12-07 14:52:08
*/
public class RedCommand extends JButton implements MyCommand {
private JPanel panel;
public RedCommand(String name,JPanel panel)
{
//构造一个按钮控件
super(name);
this.panel = panel;
}
@Override
public void execute() {
//背景变为红色
panel.setBackground(Color.RED);
}
}
package com.eric.行为型模式.命令模式.例1.command;
import javax.swing.*;
import java.awt.*;
/**
* @author Eric
* @ProjectName my_design_23
* @description 退出命令
* @CreateTime 2020-12-07 14:56:38
*/
public class ExitCommand extends JButton implements MyCommand {
public ExitCommand(String name)
{
//构造一个按钮控件
super(name);
}
@Override
public void execute() {
//系统退出
System.exit(0);
}
}
package com.eric.行为型模式.命令模式.例1;
import com.eric.行为型模式.命令模式.例1.command.ExitCommand;
import com.eric.行为型模式.命令模式.例1.command.MyCommand;
import com.eric.行为型模式.命令模式.例1.command.RedCommand;
import com.eric.行为型模式.命令模式.例1.command.YellowCommand;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* @author Eric
* @ProjectName my_design_23
* @description 图形窗口
* @CreateTime 2020-12-07 15:00:01
*/
public class MyFrame extends JFrame implements ActionListener {
private JPanel panel;
private YellowCommand btnYellow;
private RedCommand btnRed;
private ExitCommand btnExit;
public MyFrame()
{
super("命令模式");
panel = new JPanel();
this.add(panel);
//实例化具体命令
btnYellow = new YellowCommand("黄色", panel);
btnRed = new RedCommand("红色",panel);
btnExit = new ExitCommand("退出");
//将按钮控件添加到面板
panel.add(btnYellow);
panel.add(btnRed);
panel.add(btnExit);
//添加监听对象
btnYellow.addActionListener(this);
btnRed.addActionListener(this);
btnExit.addActionListener(this);
//设置窗体
this.setSize(400,300);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
MyCommand obj = (MyCommand)e.getSource();
obj.execute();
}
public static void main(String[] args) {
new MyFrame();
}
}
原文:https://www.cnblogs.com/zyl-0110/p/14206016.html