打开网站显示建设中北京学生聚集
命令模式:一种数据驱动的设计模式也属于行为型模式,请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。你认为是命令的地方都可以使用命令模式。
介绍
- 意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。
 - 主要解决问题:行为请求者与行为实现者的关系紧耦合,将"行为请求者"与"行为实现者"解耦,通过调用者调用接受者执行命令,顺序:调用者→接受者→命令。
 - 关键代码:定义三个角色,命令、接受者、调用者
 - 优点:1、降低了系统耦合度。 2、新的命令可以很容易添加到系统中去。
 - 缺点:使用命令模式可能会导致某些系统有过多的具体命令类
 
示例
还是以绘制三角形、圆形、矩形为例:
-  创建一个绘制命令接口(抽象命令)
//抽象命令 public interface Drawing {void execute(); } -  接收者(接收 绘制方法)
//接收者 public class Draw {public void triangle(){//绘制三角形逻辑}public void circular(){//绘制圆形逻辑}public void rectangle(){//绘制矩形逻辑}} -  具体命令
绘制三角形具体命令
绘制圆形具体命令//具体绘制三角形命令 public class TriangleDraw implements Drawing {Draw draw;public TriangleDraw(Draw draw) {this.draw = draw;}@Overridepublic void execute() {draw.triangle();} }
绘制矩形具体命令//具体绘制圆形命令 public class CircularDraw implements Drawing{Draw draw;public CircularDraw(Draw draw) {this.draw = draw;}@Overridepublic void execute() {draw.circular();} }//具体绘制矩形命令 public class RectangleDraw implements Drawing{Draw draw;public RectangleDraw(Draw draw) {this.draw = draw;;}@Overridepublic void execute() {draw.rectangle();} } -  使用
//使用示例public static void main(String[] args) {Draw draw = new Draw();TriangleDraw triangleDraw = new TriangleDraw(draw);CircularDraw circularDraw = new CircularDraw(draw);RectangleDraw rectangleDraw = new RectangleDraw(draw);Canvas canvas = new Canvas();canvas.takeDrawing(triangleDraw);canvas.takeDrawing(circularDraw);canvas.takeDrawing(rectangleDraw);canvas.call();} 
