• 为了保证你在浏览本网站时有着更好的体验,建议使用类似Chrome、Firefox之类的浏览器~~
    • 如果你喜欢本站的内容何不Ctrl+D收藏一下呢,与大家一起分享各种编程知识~
    • 本网站研究机器学习、计算机视觉、模式识别~当然不局限于此,生命在于折腾,何不年轻时多折腾一下

python设计模式–命令模式

Python admin 3个月前 (08-19) 202次浏览 0个评论 扫描二维码

今天小崔和小雷出门去餐厅吃饭,为了庆祝一下。来到餐厅之后,服务员过来拿着菜单,小崔看着菜单 12345 点了 5 个菜,确定了这顿饭的菜单之后,服务员把这些菜单交到后厨,后厨按照给出的菜单一道一道的做出来。

这个点菜到做菜的过程就是命令模式的实现,客户端就是小崔和小雷,发出菜单的请求,他们不关心这些菜是怎么做成的。服务员就是指挥者的角色,将菜单转交给后厨,每一道菜就是一个命令,后厨厨师看到菜单就开始做菜。

下面给出一个代码示例说明上面这个图:

# -*- coding: utf-8 -*-
# @Time    : 2018/8/19 下午 5:45
# @Author  : zhusimaji
# @File    : cook.py
# @Software: PyCharm
class customer(object):
    def __init__(self,*args):
        self.namelist=[ x for x in args]
        self.cooklist=[]
    def order_dish(self,dishname):
        self.cooklist.append(dishname)


class servicer(object):
    def __init__(self,name):
        self.name=name

    def get_customer(self,customer):
        self.dishlist=customer.cooklist
        print('{} recieve dish list'.format(self.dishlist))


class cooker(object):
    def __init__(self,name):
        self.name=name
    def get_dish(self,servicer):
        for x in servicer.dishlist:
            self.cook_dish(x)

    def cook_dish(self,dish):
        print('start cook {}  ...\n'.format(dish))



if __name__ == '__main__':
   cx= customer('xiapcui')
   cx.order_dish('a1')
   cx.order_dish('a2')

   cy=servicer('xiaoming')
   cy.get_customer(cx)

   cz=cooker('xiaozhu')
   cz.get_dish(cy)

代码输出结果

['a1', 'a2'] recieve dish list
start cook a1  ...

start cook a2  ...

Deeplearn, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明python 设计模式–命令模式
喜欢 (0)
admin
关于作者:

您必须 登录 才能发表评论!