zoukankan      html  css  js  c++  java
  • 命令模式详细介绍及实例解析

    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

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

    2.命令模式的优缺点:

    优点:

    1、降低了系统耦合度。

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

    缺点:

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

    3.相关实例解析

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

    相关代码:

    // 旅游接口
    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();
        }
    }
    
    输出结果:
    name:[xiaoming] age:[18] set off
    tarvel around ShangHai
    name:[xiaoming] age:[18] get back
    get back from ShangHai
    
  • 相关阅读:
    批量改主机名报错:Address 192.168.43.117 maps to bogon, but this does not map back to the address
    ssh远程登录连接慢的解决方法
    expect脚本远程登录、远程执行命令和脚本传参简单用法
    将集群WEB节点静态数据迁移到共享存储器(LNMP环境)
    LAMP环境搭建之编译安装指南(php-5.3.27.tar.gz)
    手把手教你设置MongoDB密码
    手把手教你在Linux系统下安装MongoDB
    手把手教你在Linux系统下安装MySQL
    在Linux下使用rm -rf /*后会怎样?
    Failed to configure a DataSource 'url' attribute问题解决
  • 原文地址:https://www.cnblogs.com/charlypage/p/12245530.html
Copyright © 2011-2022 走看看