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
    
  • 相关阅读:
    aodquery,clientdataset数据控件之间的速度区别
    centos防火墙相关
    centos安装jdk,精简
    delphi 操作excel复制区域功能呢
    centos安装redis,最靠谱的教程
    图像识别,借助百度云,上传图片实现逻辑
    LinkedHashmap和HashMap对比以及说明
    Windows环境下Zookeeper安装和使用
    你不知道的JavaScript--Item1 严格模式
    jQuery学习之旅 Item2 选择器【二】
  • 原文地址:https://www.cnblogs.com/charlypage/p/12245530.html
Copyright © 2011-2022 走看看