前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一文带你了解命令模式及相关实例解析

一文带你了解命令模式及相关实例解析

作者头像
Dream城堡
发布2022-01-07 17:20:59
3300
发布2022-01-07 17:20:59
举报
文章被收录于专栏:Spring相关Spring相关
1.简介

The command pattern is a behavioral design pattern in which an object is used to encapsulate all information needed to perform an action or trigger an event at a later time. This information includes the method name, the object that owns the method and values for the method parameters. (命令模式是一种行为设计模式,其中一个对象用于封装所有信息,以便在以后执行某个操作或触发某个事件。此信息包括方法名称、拥有方法的对象和方法参数的值) —— quote from Wikipedia

20389531-0917b614928fd95a.png
20389531-0917b614928fd95a.png

​ 简而言之,命令模式就是将封装了相关方法的类进行收集并调用,最终实现相应的结果。

2.命令模式的优缺点:
优点:

1、降低了系统耦合度。

2、新的命令可以很容易添加到系统中去。

缺点:

使用命令模式可能会导致某些系统有过多的具体命令类。

3.相关实例解析

​ 举个常见的例子,小明去上海旅游,有出发和返程的方法。然后代理类放入相关的类,将其正确的执行。

相关代码:

代码语言:javascript
复制
// 旅游接口
interface Place {
    void travel();
}

class Person {

    private String name = "xiaoming";
    private int age = 18;

    // 出发
    public void setOff() {
        System.out.println("name:[" + name + "] " + "age:[" + age + "] " + "set off");

    }

    // 返程
    public void getBack() {
        System.out.println("name:[" + name + "] " + "age:[" + age + "] " + "get back");
    }
}


// 上海旅游
class GoToShangHai implements Place {

    private Person person;

    public GoToShangHai(Person person) {
        this.person = person;
    }

    @Override
    public void travel() {
        person.setOff();
        System.out.println("tarvel around ShangHai");
    }
}

// 从上海返程
class BackFromShangHai implements Place {

    private Person person;

    public BackFromShangHai(Person person) {
        this.person = person;
    }

    @Override
    public void travel() {
        person.getBack();
        System.out.println("get back from ShangHai");
    }
}

class  Proxy{
    private List<Place> placeList = new ArrayList<>();

    public void travelPlace(Place place) {
        placeList.add(place);
    }

    public void places() {
        for (Place place : placeList) {
            place.travel();
        }
        placeList.clear();
    }

}


public class CommondDemo {

    public static void main(String[] args) {
        Person person = new Person();
        GoToShangHai goToShangHai = new GoToShangHai(person);
        BackFromShangHai backFromShangHai = new BackFromShangHai(person);

        Proxy proxy = new Proxy();
        proxy.travelPlace(goToShangHai);
        proxy.travelPlace(backFromShangHai);

        proxy.places();
    }
}
输出结果:
代码语言:javascript
复制
name:[xiaoming] age:[18] set off
tarvel around ShangHai
name:[xiaoming] age:[18] get back
get back from ShangHai
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-01-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.简介
  • 2.命令模式的优缺点:
    • 优点:
      • 缺点:
      • 3.相关实例解析
        • 输出结果:
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档