行為型模式--命令模式

 

简介 

以請求作為主導角色對封装完成一项操作(如撤销、重做、复制、粘贴等)或在觸发一个事件(如滑鼠單擊、雙擊等)时執行所需行為,简而言之,这意味着创建一个命令类來包含该操作/事件所需的逻辑動作並由請求主導該命令之執行。

  • 之後客戶端就可下達請求來調用此命令類以執行。
  • 可將调用与执行命令的对象解耦,调用者无需知道命令的任何实现细节。
  • 亦可組合命令,如在实现一个多层撤销命令时,此在應用中非常常見。

应用案例:

撤销操作是命令模式的杀手级应用案例,然而命令模式能做的实际上还有很多,如:

  • GUI工具列按钮或菜单项:实现圖形介面上工具列按钮或菜单项上的动作,如剪切、复制、 粘贴、重做…等。
  • 事务型行为和日志记录:事务型行为和日志记录对于变更记录常保有一份持久化日志,如操作系统可用它从系统崩溃中作恢复、关系型数据库可用它来实现事务、文件系统可用它来实现快照、向导安装程序可用它来恢复取消的安装。

UML

  • 命令Command抽象類:声明接口
  • 命令ConcreteCommand具体類:實作接口方法並與接收Receive類作绑定以執行需求操作。
  • 接收Receiver:負責執行相关需求之業務邏輯的操作。
  • 請求Invoker:此為命令式下執行之主導角色,其須梆定命令ConcreteCommand具体對象以對下達請求來执行相應命令。

示例1

# -*- coding: utf8 -*-

from abc import ABCMeta,abstractmethod

 

class Command(metaclass= ABCMeta):         #命令抽象类:声明接口

          @abstractmethod

    def execute(self):

        pass

 

class ConcreteCommand(Command):   #命令具体類:實作命令抽象類所声明之接口,並須與接收对象作绑定以可執行其相关需求之業務邏輯操作。

    def __init__(self,recv):

        self.recv = recv

 

    def execute(self):

        self.recv.action()

 

class Receiver:          #接收類:負責執行相关需求之業務邏輯操作

    def action(self):

        print ("Receiver Action")

 

class Invoker:           #请求類:此為命令模式下執行之主導角色,其須梆定命令ConcreteCommand具体對象以對下達請求來执行相應命令

    def command(self, cmd):

        self.cmd = cmd

 

    def execute(self):

        self.cmd.execute()

 

實際業務場景如下:

if __name__ == "__main__":

    recv = Receiver()

    cmd = ConcreteCommand(recv)

    invoker = Invoker()

    invoker.command(cmd)

    invoker.execute()

輸出:

Receiver Action

示例2:

# -*- coding: UTF-8 -*-

from abc import ABCMeta, abstractmethod

 

class Order(metaclass=ABCMeta):  #订单抽象类(*Command)

    @abstractmethod

    def execute(self):

        pass

 

class BuyStockOrder(Order):           #购买股票订单具体類(*ConcreteCommand)

    def __init__(self,stock):

        self.stock = stock

 

    def execute(self):     #實作抽象類定義之接口

        self.stock.buy()

 

class SellStockOrder(Order): #卖股票訂單具体類(*ConcreteCommand)

    def __init__(self, stock):

        self.stock = stock

 

    def execute(self):

        self.stock.sell()

 

class StockTrade:              #股票交易類(*Receiver)

    def buy(self):

        print ("You will buy stocks")

 

    def sell(self):

        print ("You will sell stocks")

 

class Agent:    #代理類(*invoker)

    def __init__(self):

        self.__orderQueue = []

 

    def placeOrder(self, order):

        self.__orderQueue.append(order)

        order.execute()

# Client

if __name__ == '__main__':

          #Receiver

    stock = StockTrade()

          #Command

    buyStock = BuyStockOrder(stock)

    sellStock = SellStockOrder(stock)

 

    # Invoker

    agent = Agent()

    agent.placeOrder(buyStock)

    agent.placeOrder(sellStock)

輸出:

You will buy stocks

You will sell stocks

命令模式的优缺点

1.优点

   1.1 调用操作的类与执行该操作的对象解耦。

   1.2 可提供队列型式來创建一系列組合命令

   1.3 添加新命令更加容易,且无需更改现有代码

1.4常見於回滚系统之定义,例如在向導示例中我们可以编写一个回滚方法。

2.缺点

   2.1 为了实现目标,需要大量的类來进行协作

   2.2 每个单独命令都是一个ConcreteCommand,从而會因增加需要而实现欲维护的类数量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
4S店客户管理小程序-毕业设计,基于微信小程序+SSM+MySql开发,源码+数据库+论文答辩+毕业论文+视频演示 社会的发展和科学技术的进步,互联网技术越来越受欢迎。手机也逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。手机具有便利性,速度快,效率高,成本低等优点。 因此,构建符合自己要求的操作系统是非常有意义的。 本文从管理员、用户的功能要求出发,4S店客户管理系统中的功能模块主要是实现管理员服务端;首页、个人中心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理,用户客户端:首页、车展、新闻头条、我的。门店客户端:首页、车展、新闻头条、我的经过认真细致的研究,精心准备和规划,最后测试成功,系统可以正常使用。分析功能调整与4S店客户管理系统实现的实际需求相结合,讨论了微信开发者技术与后台结合java语言和MySQL数据库开发4S店客户管理系统的使用。 关键字:4S店客户管理系统小程序 微信开发者 Java技术 MySQL数据库 软件的功能: 1、开发实现4S店客户管理系统的整个系统程序; 2、管理员服务端;首页、个人中心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理等。 3、用户客户端:首页、车展、新闻头条、我的 4、门店客户端:首页、车展、新闻头条、我的等相应操作; 5、基础数据管理:实现系统基本信息的添加、修改及删除等操作,并且根据需求进行交流信息的查看及回复相应操作。
现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本微信小程序医院挂号预约系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此微信小程序医院挂号预约系统利用当下成熟完善的SSM框架,使用跨平台的可开发大商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。微信小程序医院挂号预约系统有管理员,用户两个角色。管理员功能有个人中心,用户管理,医生信息管理,医院信息管理,科室信息管理,预约信息管理,预约取消管理,留言板,系统管理。微信小程序用户可以注册登录,查看医院信息,查看医生信息,查看公告资讯,在科室信息里面进行预约,也可以取消预约。微信小程序医院挂号预约系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值