python版本的中介者模式

# -*- coding:UTF-8 -*-
import abc


class Mediator(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def send(self, message, colleague):
        pass


class Colleague(metaclass=abc.ABCMeta):
    def __init__(self, mediator):
        self._mediator = mediator

    @abc.abstractmethod
    def send(self, message):
        pass

    @abc.abstractmethod
    def notify(self, message):
        pass


class ConcreteColleague1(Colleague):

    def send(self, message):
        self._mediator.send(message, self)

    def notify(self, message):
        print("同事1得到信息:%s" % message)


class ConcreteColleague2(Colleague):
    def send(self, message):
        self._mediator.send(message, self)

    def notify(self, message):
        print("同事2得到信息:%s" % message)


class ConcreteMediator(Mediator):
    def __init__(self):
        self.__colleague1 = None
        self.__colleague2 = None

    @property
    def colleague1(self):
        return

    @colleague1.setter
    def colleague1(self,value):
        self.__colleague1=value

    @property
    def colleague2(self):
        return

    @colleague2.setter
    def colleague2(self,value):
        self.__colleague2=value

    def send(self, message, colleague):
        if colleague == self.__colleague1:
            self.__colleague2.notify(message)
        else:
            self.__colleague1.notify(message)


if __name__ == "__main__":
    m = ConcreteMediator()
    c1 = ConcreteColleague1(m)
    c2 = ConcreteColleague2(m)

    m.colleague1=c1
    m.colleague2=c2

    c1.send('吃过饭了吗?')
    c2.send("没有呢,你打算请客吗?")

原代码中了用了只写属性,python中比较纠结一定要暴露读属性!

posted @ 2018-01-25 11:38  gjw  阅读(119)  评论(0)    收藏  举报