• 设计模式 -- 命令模式(Command Pattern)


    命令模式:一种数据驱动的设计模式也属于行为型模式,请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。你认为是命令的地方都可以使用命令模式。

    介绍
    • 意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。
    • 主要解决问题:行为请求者与行为实现者的关系紧耦合,将"行为请求者""行为实现者"解耦,通过调用者调用接受者执行命令,顺序:调用者接受者命令。
    • 关键代码:定义三个角色,命令、接受者、调用者
    • 优点:1、降低了系统耦合度。 2、新的命令可以很容易添加到系统中去。
    • 缺点:使用命令模式可能会导致某些系统有过多的具体命令类
    示例

    还是以绘制三角形、圆形、矩形为例:

    1. 创建一个绘制命令接口(抽象命令)
      1. //抽象命令
      2. public interface Drawing {
      3. void execute();
      4. }
    2. 接收者(接收 绘制方法
      1. //接收者
      2. public class Draw {
      3. public void triangle(){
      4. //绘制三角形逻辑
      5. }
      6. public void circular(){
      7. //绘制圆形逻辑
      8. }
      9. public void rectangle(){
      10. //绘制矩形逻辑
      11. }
      12. }
    3. 具体命令
      绘制三角形具体命令
      1. //具体绘制三角形命令
      2. public class TriangleDraw implements Drawing {
      3. Draw draw;
      4. public TriangleDraw(Draw draw) {
      5. this.draw = draw;
      6. }
      7. @Override
      8. public void execute() {
      9. draw.triangle();
      10. }
      11. }
      绘制圆形具体命令
      1. //具体绘制圆形命令
      2. public class CircularDraw implements Drawing{
      3. Draw draw;
      4. public CircularDraw(Draw draw) {
      5. this.draw = draw;
      6. }
      7. @Override
      8. public void execute() {
      9. draw.circular();
      10. }
      11. }
      绘制矩形具体命令
      1. //具体绘制矩形命令
      2. public class RectangleDraw implements Drawing{
      3. Draw draw;
      4. public RectangleDraw(Draw draw) {
      5. this.draw = draw;;
      6. }
      7. @Override
      8. public void execute() {
      9. draw.rectangle();
      10. }
      11. }
    4. 使用
      1. //使用示例
      2. public static void main(String[] args) {
      3. Draw draw = new Draw();
      4. TriangleDraw triangleDraw = new TriangleDraw(draw);
      5. CircularDraw circularDraw = new CircularDraw(draw);
      6. RectangleDraw rectangleDraw = new RectangleDraw(draw);
      7. Canvas canvas = new Canvas();
      8. canvas.takeDrawing(triangleDraw);
      9. canvas.takeDrawing(circularDraw);
      10. canvas.takeDrawing(rectangleDraw);
      11. canvas.call();
      12. }

  • 相关阅读:
    资料分析(错题、经典)
    Spring Security
    【深度学习 & 推荐系统 & 基础知识篇】基于内容的推荐,基于协同过滤的推荐;余弦相似度:定义、在科研中的应用。传统的推荐方法 | 校招题目:UML中的动态视图有:...
    异步 IO 机制 io_uring
    PHP 文件处理
    【软考】8.2 编译程序基本原理/文法/正规式/有限自动机
    Java项目如何防止SQL注入的四种方案
    10个基于.Net开发的Windows开源软件项目
    【面试专栏】第四篇:Java基础:集合篇-Map、HashMap、Hashtable
    基于Java swing+mysql+eclipse的【图书管理系统】
  • 原文地址:https://blog.csdn.net/qq_50675668/article/details/134306284