• 设计模式 -- 命令模式(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. }

  • 相关阅读:
    哪种品牌台灯适合学生用?盘点学生护眼台灯十大牌子
    Redis 实现限流策略
    Elasticsearch--easy-ES框架使用,轻松操作查询Elasticsearch,简化开发
    【Java】Java生成PDF工具类
    C和C++的区别(3) const增强
    二、Java 开发环境配置(Windows11系统为例)
    java-net-php-python-ssm仿猫眼电影计算机毕业设计程序
    智能井盖的用处有哪些?好用在什么地方?
    不敢置信,某位神秘大佬上传Mybatis学习笔记,让你轻松从入门到精通
    初乳对宝宝和宝妈的影响有哪些
  • 原文地址:https://blog.csdn.net/qq_50675668/article/details/134306284