File tree Expand file tree Collapse file tree 13 files changed +246
-0
lines changed
DesignPattern/src/main/java/com/design Expand file tree Collapse file tree 13 files changed +246
-0
lines changed Original file line number Diff line number Diff line change 1+ package com .design .command ;
2+
3+ /**
4+ * 抽象命令
5+ *
6+ * @author wliduo[i@dolyw.com]
7+ * @date 2023/2/2 16:05
8+ */
9+ public abstract class Command {
10+
11+ protected RadioReceived radioReceived = new RadioReceived ();
12+
13+ public abstract void execute ();
14+
15+ }
Original file line number Diff line number Diff line change 1+ package com .design .command ;
2+
3+ /**
4+ * 使用命令对象的入口
5+ *
6+ * @author wliduo[i@dolyw.com]
7+ * @date 2023/2/2 16:05
8+ */
9+ public class Invoker {
10+
11+ private Command command ;
12+
13+ public void setCommand (Command command ) {
14+ this .command = command ;
15+ }
16+
17+ public void action (){
18+ this .command .execute ();
19+ }
20+
21+ }
Original file line number Diff line number Diff line change 1+ package com .design .command ;
2+
3+ /**
4+ * 命令模式
5+ *
6+ * @author wliduo[i@dolyw.com]
7+ * @date 2023/2/2 16:05
8+ */
9+ public class Main {
10+
11+ public static void main (String [] args ) {
12+ // 定义调用者
13+ Invoker invoker = new Invoker ();
14+ // 创建命令,启动收音机
15+ Command command = new StartCommandImpl ();
16+ // 调用者接受命令
17+ invoker .setCommand (command );
18+ // 执行命令
19+ invoker .action ();
20+ // 换下个频道
21+ command = new NextCommandImpl ();
22+ invoker .setCommand (command );
23+ invoker .action ();
24+ // 关闭收音机
25+ command = new ShutdownCommandImpl ();
26+ invoker .setCommand (command );
27+ invoker .action ();
28+ }
29+
30+ }
Original file line number Diff line number Diff line change 1+ package com .design .command ;
2+
3+ /**
4+ * 切换频道具体命令
5+ *
6+ * @author wliduo[i@dolyw.com]
7+ * @date 2023/2/2 16:05
8+ */
9+ public class NextCommandImpl extends Command {
10+ @ Override
11+ public void execute () {
12+ super .radioReceived .next ();
13+ }
14+ }
Original file line number Diff line number Diff line change 1+ package com .design .command ;
2+
3+ /**
4+ * 真正的命令执行对象
5+ *
6+ * @author wliduo[i@dolyw.com]
7+ * @date 2023/2/2 16:05
8+ */
9+ public class RadioReceived {
10+
11+ public void start () {
12+ System .out .println ("启动收音机" );
13+ }
14+
15+ public void next () {
16+ System .out .println ("切换频道" );
17+ }
18+
19+ public void shutdown () {
20+ System .out .println ("关闭收音机" );
21+ }
22+
23+ }
Original file line number Diff line number Diff line change 1+ package com .design .command ;
2+
3+ /**
4+ * 关闭收音机具体命令
5+ *
6+ * @author wliduo[i@dolyw.com]
7+ * @date 2023/2/2 16:05
8+ */
9+ public class ShutdownCommandImpl extends Command {
10+ @ Override
11+ public void execute () {
12+ super .radioReceived .shutdown ();
13+ }
14+ }
Original file line number Diff line number Diff line change 1+ package com .design .command ;
2+
3+ /**
4+ * 启动收音机具体命令
5+ *
6+ * @author wliduo[i@dolyw.com]
7+ * @date 2023/2/2 16:05
8+ */
9+ public class StartCommandImpl extends Command {
10+ @ Override
11+ public void execute () {
12+ super .radioReceived .start ();
13+ }
14+ }
Original file line number Diff line number Diff line change 1+ package com .design .state ;
2+
3+ /**
4+ * 状态模式 - 状态机的扭转
5+ *
6+ * @author wliduo[i@dolyw.com]
7+ * @date 2023/2/2 15:29
8+ */
9+ public class Main {
10+
11+ public static void main (String [] args ) {
12+ // 声明环境类
13+ OrderContext orderContext = new OrderContext ();
14+ // 初始化状态
15+ OrderState orderState = new OrderCreateStateImpl ();
16+ // OrderState orderState = new OrderPayStateImpl();
17+ orderState .handle (orderContext );
18+ // 状态机扭转
19+ orderContext .handle ();
20+ orderContext .handle ();
21+ orderContext .handle ();
22+ orderContext .handle ();
23+ orderContext .handle ();
24+ }
25+
26+ }
Original file line number Diff line number Diff line change 1+ package com .design .state ;
2+
3+ /**
4+ * 订单环境类
5+ *
6+ * @author wliduo[i@dolyw.com]
7+ * @date 2023/2/2 15:12
8+ */
9+ public class OrderContext {
10+
11+ private OrderState orderState ;
12+
13+ /**
14+ * 处理方法
15+ */
16+ public void handle () {
17+ orderState .handle (this );
18+ }
19+
20+ public void setOrderState (OrderState orderState ) {
21+ this .orderState = orderState ;
22+ }
23+ }
Original file line number Diff line number Diff line change 1+ package com .design .state ;
2+
3+ /**
4+ * 订单下单具体状态
5+ *
6+ * @author wliduo[i@dolyw.com]
7+ * @date 2023/2/2 15:12
8+ */
9+ public class OrderCreateStateImpl extends OrderState {
10+
11+ @ Override
12+ public void handle (OrderContext orderContext ) {
13+ System .out .println ("下单" );
14+ // 可以和享元模式组合,不需要每次都去new具体状态,可以创建一次后重复使用
15+ orderContext .setOrderState (new OrderPayStateImpl ());
16+ }
17+ }
You can’t perform that action at this time.
0 commit comments