Chinaunix首页 | 论坛 | 博客
  • 博客访问: 212914
  • 博文数量: 70
  • 博客积分: 2050
  • 博客等级: 大尉
  • 技术积分: 700
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-15 21:42
文章分类

全部博文(70)

文章存档

2013年(1)

2011年(5)

2010年(3)

2009年(9)

2008年(17)

2007年(6)

2006年(29)

我的朋友

分类: Python/Ruby

2009-06-19 17:59:12

#!/usr/bin/python
# -*- coding: utf8 -*-

class dispatch:
    def __init__(self):
        self.__map = dict()

    def attach(self, instance):
        id, map = instance.callback_traits
        self.__map[id] = map

    def detach(self, instance):
        del self.__map[instance.callback_traits[0]]

    def execute(self, instance, method, request):
        if self.__map.has_key(instance):
            method_map = self.__map[instance]
            if method_map.has_key(method):
                method_map[method].__call__(request)

class role:
    def __init__(self):
        self.callback_traits = (1, {1:self.login, 2:self.move})

    def login(self, request):
        print 'role::login', request

    def move(self, request):
        print 'role::move', request

class package:
    def __init__(self, name):
        self.callback_traits = (2, {1:self.add, 2:self.remove})
        self.name = name

    def add(self, request):
        print 'package::add(%s)' % self.name, request

    def remove(self, request):
        print 'package::remove(%s)' % self.name, request

if __name__ == '__main__':
    d = dispatch()
    p1, p2 = package('one'), package('two')
    p = p2
    d.attach(role())
    d.attach(p)
    d.execute(1, 1, 'hello')
    d.execute(1, 2, 'world')
    d.execute(2, 1, 'foo bar')
    d.execute(2, 2, 'hello, world!')
    d.detach(p)
    d.execute(2, 1, '(del)foo bar')
    d.execute(2, 2, '(del)hello, world!')
阅读(770) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~