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

Posted 软件猫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入浅出设计模式之命令模式适配器模式外观模式相关的知识,希望对你有一定的参考价值。

命令模式

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对象即可实现自己的功能。 下图是外观模式的类图



以上是关于深入浅出设计模式之命令模式适配器模式外观模式的主要内容,如果未能解决你的问题,请参考以下文章

Head First 设计模式之适配器模式与外观模式

《Head First 设计模式》之适配器模式与外观模式

设计模式之适配器模式与外观模式

设计模式之适配器模式与外观模式

Head First 设计模式之适配器模式与外观模式

外观模式&适配器模式