zoukankan      html  css  js  c++  java
  • Python 设计模式 命令模式

          JAVA 中的命令模式大家估计都很熟悉,就是可以讲命令调用者和命令的执行者进行解耦。

    看一下类图:

        

       。

        第一步:   目前Python设计的实体有电灯,和仓库门 (Light,GarageDoor)

    Entity
     1 #coding = utf8
     2 class Light(object):
     3     def on(self):
     4         print '---the light on---'
     5     def off(self):
     6         print '---the light off---'
     7 
     8 class GarageDoor(object):
     9     def action_up(self,*args):
    10         print '--- the garageDoor open ---'
    11     def action_down(self,*args):
    12         print '---  the garageDoor down ---'
    13         
    14     def action_stop(self,*args):
    15         print '--- the garageDoor stop  ---'
    16         
    17     def action_lighton(self,*args):
    18         print '--- the garageDoor lighton ---'
    19     
    20     def action_lightoff(self,*args):
    21         print '--- the garageDoor lightoff---'

         具体的命令如Light.on,Light.off 等在实体类中进行了定义。
        

       第二步: 进行,AbstractCommand ,和ConcreteCommand 的实现。

      

    Command
     1 class Command(object):
     2     def callback(self,invoker,name,*args):
     3         method=getattr(invoker,name,None)
     4         #print method
     5         #print args
     6         if callable(method):
     7             method(*args)
     8             #print invoker
     9   
    10     def setTask(self,tasks):
    11         pass
    12     
    13     def execute(self):
    14         pass
    15     
    16 class NoCommand(object):
    17     def setTask(self):
    18         pass
    19     def execute(self):
    20         pass
    21     
    22 # the type no constraint 
    23 class LightOnCommand(Command):
    24     def __init__(self,light):
    25         self.light=light
    26     
    27     def execute(self):   
    28         self.light.on()
    29         
    30     
    31     
    32 
    33 class GarageDoorCommand(Command):
    34     
    35     
    36     def __init__(self,garageDoor,tasks):
    37         self.garageDoor = garageDoor
    38         self.tasks=tasks
    39         
    40     def setTasks(self,tasklist):
    41         self.tasks=tasklist
    42     
    43     
    44     def execute(self):
    45         for task in self.tasks:
    46             self.callback(garageDoor,task[0],task[1])   

      由于Python 中的接口,和继承都在 通过标签实现的。这一点同JAVA 有很大的不同

    Invoker
     1 class SimpleRemoteControl(object):
     2     def __init__(self,command):
     3         self.command=command
     4     def buttonWasPressed(self):
     5         self.command.execute()
     6 
     7 
     8 class RemoteControl(object):
     9      commands_open=[None for i in range(8)]
    10      commands_off=[None for i in range(8)]
    11      
    12      def __init__(self):
    13        pass

     最后在Invoker进行调用,其中的Light,GarageDoor 相当于Receiver 。

    这整个过程类似于JAVA 中Command 模式的实现了。

  • 相关阅读:
    进程与线程的区别与联系
    c 指针兼容性问题
    柔性数组
    Makefile之wildcard
    shell编程笔记1
    linux下gcc编译的参数详细说明
    的理解
    URL与URI的区别
    Log4J积累
    linux 查看磁盘、文件夹、文件大小(df du)
  • 原文地址:https://www.cnblogs.com/jerryxing/p/2873298.html
Copyright © 2011-2022 走看看