提交 b38ba447 编写于 作者: E ex_kongxiang

feat(命令模式):create

上级 aed20e66
package com.kongxiang.raindrop.dp.type.behavior.command;
/**
* 抽象命令类
*
* @author 孔翔
* @since 2023-10-20
* copyright for author : 孔翔 at 2023-10-20
* dp
*/
public interface ICommand {
public void execute();
public void undo();
}
package com.kongxiang.raindrop.dp.type.behavior.command;
import lombok.AllArgsConstructor;
/**
* @author 孔翔
* @since 2023-10-20
* copyright for author : 孔翔 at 2023-10-20
* dp
*/
@AllArgsConstructor
public class TvChangeChannelCommand implements ICommand {
private TvReceiver tvReceiver;
@Override
public void execute() {
tvReceiver.next();
}
@Override
public void undo() {
tvReceiver.pre();
}
}
package com.kongxiang.raindrop.dp.type.behavior.command;
import lombok.AllArgsConstructor;
/**
* @author 孔翔
* @since 2023-10-20
* copyright for author : 孔翔 at 2023-10-20
* dp
*/
@AllArgsConstructor
public class TvController {
private ICommand on ;
private ICommand off ;
private ICommand change ;
public void trunOn() {
on.execute();
}
public void trunOff() {
off.execute();
}
public void turnNext() {
change.execute();
}
public void turnPre() {
change.undo();
}
}
package com.kongxiang.raindrop.dp.type.behavior.command;
/**
* @author 孔翔
* @since 2023-10-20
* copyright for author : 孔翔 at 2023-10-20
* dp
*/
public class TvMain {
public static void main(String[] args) {
TvReceiver tvReceiver = new TvReceiver();
ICommand on = new TvOnCommand(tvReceiver);
ICommand off = new TvOffCommand(tvReceiver);
ICommand change = new TvChangeChannelCommand(tvReceiver);
TvController controller = new TvController(on,off,change);
controller.trunOn();
controller.turnNext();
controller.turnPre();
controller.trunOff();
}
}
package com.kongxiang.raindrop.dp.type.behavior.command;
import lombok.AllArgsConstructor;
/**
* @author 孔翔
* @since 2023-10-20
* copyright for author : 孔翔 at 2023-10-20
* dp
*/
@AllArgsConstructor
public class TvOffCommand implements ICommand {
private TvReceiver tvReceiver;
@Override
public void execute() {
tvReceiver.off();
}
@Override
public void undo() {
tvReceiver.on();
}
}
package com.kongxiang.raindrop.dp.type.behavior.command;
import lombok.AllArgsConstructor;
/**
* @author 孔翔
* @since 2023-10-20
* copyright for author : 孔翔 at 2023-10-20
* dp
*/
@AllArgsConstructor
public class TvOnCommand implements ICommand {
private TvReceiver tvReceiver;
@Override
public void execute() {
tvReceiver.on();
}
@Override
public void undo() {
tvReceiver.off();
}
}
package com.kongxiang.raindrop.dp.type.behavior.command;
/**
* @author 孔翔
* @since 2023-10-20
* copyright for author : 孔翔 at 2023-10-20
* dp
*/
public class TvReceiver {
public void on() {
System.out.println("电视开机");
}
public void off() {
System.out.println("电视关机");
}
public void next() {
System.out.println("换下一个台");
}
public void pre(){
System.out.println("换上一个台");
}
}
@startuml
'https://plantuml.com/sequence-diagram
skinparam linetype ortho
interface ICommand {
+ void execute();
+ void undo();
}
class CommandImpl
class Invoker {
- ICommand
public turnCommand()
}
class Receiver{
+ someOperate();
}
ICommand <|-- CommandImpl
Invoker o--> ICommand
CommandImpl --> Receiver
@enduml
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册