深入浅出设计模式之命令模式、适配器模式、外观模式

时间:2021-10-02 22:00:18

命令模式

1、命令模式可将“动作的请求者”从“动作的执行者”对象中解耦。通过创建一个命令对象,把请求封装成一个特定的对象,让每个命令独立工作。
2、我们先来看一个命令模式最常用的场景,餐厅点餐。
客户:我要一个只是汉堡和已被麦芽饮料(创建了一个命令)
服务员:我拿走了订单,放到订单柜,并通知(orderUp方法)初始开始准备餐点。
厨师:收到订单,根据订单内容制作餐品汉堡和饮料,并交给服务员
。看到了没有,一张订单封装了所有的命令和请求,无论是客户,还是服务员,还是厨师,都是用的订单来接受和传递命令。这就是一个典型的命令模式。
3、也就是说,发出请求的对象都持有一个类似于餐厅“订单”的对象,只需要调用该对象的OrderUp方法,那么命令接收者就能收到对应的命令,从而实现我们的命令模式,将命令的发出者和命令的执行者解耦
来看命令模式的类图:
深入浅出设计模式之命令模式、适配器模式、外观模式
上述类图的执行过程是这样的:首先你有一个测试程序,一般是一个包含main方法的类。在这个main方法里面,首先创建一个客户端(Client),然后创建一个一个接受者(Receiver),再创建一个命令,将接受者(Receiver)传给这个命令(ConcreteCommand)。然后将Client的command设置为ConcreteCommand(),然后客户(Client)调用命令的execute()方法,这个方法内部是(receiver.action())
4、再看一个具体的例子,假设我们有一个遥控器,现在这个遥控器要控制7个家具打开和关闭,如何做到呢?
深入浅出设计模式之命令模式、适配器模式、外观模式
深入浅出设计模式之命令模式、适配器模式、外观模式
深入浅出设计模式之命令模式、适配器模式、外观模式
深入浅出设计模式之命令模式、适配器模式、外观模式
深入浅出设计模式之命令模式、适配器模式、外观模式

命令模式先到这里,以后再仔细体会吧。

适配器模式

适配器模式通常会有两种,一种是通过继承实现的类适配,一种是通过组合实现的对象适配。两种方法各有优劣,很那说清楚谁好谁坏。我们先来看组合适配器吧。
对象适配器的类图如下:
深入浅出设计模式之命令模式、适配器模式、外观模式

Adapter是适配器,用来将Adaptee装配成Target
Adaptee是被适配的对象
Target是一个接口,这个接口的功能需要由Adaptee来通过Adapter实现。

适配器这样做的意义是啥呢?我们看上图,有一个Client类,客户只能看到Target接口,这个接口是稳定的,而被适配的对象Adaptee是不稳定的,是可变的,通过适配器委托,可以封闭变化。同时,被封装的任何的Adaptee,都可以通过搭配Adapter使用。

使用继承的类适配器
深入浅出设计模式之命令模式、适配器模式、外观模式

外观模式

外观模式的作用是将复杂的操作交给一个Facade对象去操作,自己不需要理会全部的底层过程,只需要安心的持有该Facade对象即可实现自己的功能。
下图是外观模式的类图
深入浅出设计模式之命令模式、适配器模式、外观模式