中介模式

中介模式:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他妈呢之间的交互。
设计要点:中介模式主要有三个角色,在设计中介模式时要找到并区分这些角色:
(1)交互对象:要进行交互的一系列对象
(2)中介者:负责协调各个对象之间的交互
(3)具体中介者:中介的具体实现
以员工入职流程为例:员工收到offer后,去公司入职。员工最终是去公司的某一个具体部门,但是在入职过程中,员工并不会接触部门,一切事项与人事进行交互。在这里,员工是员工与部门是交互对象,人事属于中介。如下:

class HR:
    """人事类"""
    def __init__(self):
        self.__employee_info = {}
        self.__departments = []

    def get_employee_info(self, name, department, job_title, salary):
        self.__employee_info[name] = [department, job_title, salary]

    def check_info(self, employee):
        _name, _department = employee.get_basic_info()
        for department in self.__departments:
            info = department.get_employee_info()
            if info.get(_department) and info.get(_department).get(_name):
                self.sign_contract(info.get(_department).get(_name))
                return
        print("很抱歉{0}先生/女士,没有检索到您在{1}部门的相关信息,请你确认信息!".format(_name, _department))

    def add_department(self, department):
        self.__departments.append(department)

    def sign_contract(self, employee_info):
        print("签订合同:{0}入职XXXX公司{1}部{2}职位, 薪资每月:{3}元".format(employee_info[0], employee_info[1],
                                                            employee_info[2], employee_info[3]))


class Employee:
    """员工类"""
    def __init__(self, name, department):
        self.__name = name
        self.__department = department

    def get_basic_info(self):
        return self.__name, self.__department

class Departmenet:
    """部门类"""
    def __init__(self, department):
        self.__department = department
        self.__employee_info = {self.__department: {}}

    def set_employee_info(self, name, job_title, salary):
        self.__employee_info[self.__department][name] = [name, self.__department, job_title, salary]
        return self

    def get_employee_info(self):
        return self.__employee_info


def test():
    hr = HR()
    hr.add_department(Departmenet("经纪").set_employee_info("张三", "开发工程师", "10000"))
    hr.add_department(Departmenet("经纪").set_employee_info("李四", "开发工程师", "12000"))
    hr.add_department(Departmenet("财富").set_employee_info("王五", "开发工程师", "14000"))
    hr.add_department(Departmenet("信托").set_employee_info("吴六", "开发工程师", "16000"))
    hr.check_info(Employee("张三", "经纪"))
    hr.check_info(Employee("王五", "财富"))
    hr.check_info(Employee("张四", "经纪"))
    hr.add_department(Departmenet("经纪").set_employee_info("张四", "开发工程师", "15000"))
    hr.check_info(Employee("张四", "经纪"))


test()

应用场景:
(1)一组对象以定义良好但复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。
(2)一个对象引用其他很多对象并且直接与这些对象通信,导致难以服用该对象。
(3)想通过一个中间类来封装多个类中的行为,同时又不想生成太多的子类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值