zoukankan      html  css  js  c++  java
  • 组合模式

    将对象组合成树形结构,以表示 部分-整体 的层次结构。使得用户对单个对象和组合对象的使用具有一致性
    是一种 弱的拥有关系 
    优点:用户可以一致的使用 组合结构和单个对象
    应用场景:当需求中体现 部分与整体 的层次结构时,以及你希望用户忽略组合对象与单个对象的不同,统一使用组合中的所有对象时,就应该考虑组合模式。

    代码示例

    # 抽象类、接口
    class Company(object):
        def __init__(self, name):
            self.name = name
        def Add(self,c): pass
        def Remove(self, c): pass
        def Display(self,depth): pass
        def LineOfDuty(self): pass
    # 具体公司类
    class ConcreteCompany(Company):
        def __init__(self, name):
            self.name = name
            self.L = []
        def Add(self,c):
            self.L.append(c)
        def Display(self,depth):
            s='-'*depth+self.name
            print(s)
            for component in self.L:
                component.Display(depth+2)
        def LineOfDuty(self):
            for component in self.L:
                component.LineOfDuty()
    # 人力资源
    class HRDepartment(Company):
        def Add(self,c): pass
        def Remove(self, c): pass
        def Display(self,depth):
            s = '#' * depth + self.name
            print(s)
        def LineOfDuty(self):
            print(self.name, "员工招聘")
    # 财务部
    class FinanceDepartment(Company):
        def Add(self,c): pass
        def Remove(self, c): pass
        def Display(self,depth):
            s = '#' * depth + self.name
            print(s)
        def LineOfDuty(self):
            print(self.name, "财务收支")
    root = ConcreteCompany("北京总公司")
    root.Add(HRDepartment("总公司人力资源部"))
    root.Add(FinanceDepartment("总公司财务部"))
    comp = ConcreteCompany("华东分公司")
    comp.Add(HRDepartment("华东分公司人力资源部"))
    comp.Add(FinanceDepartment("华东分公司财务部"))
    root.Add(comp)
    comp2 = ConcreteCompany("南京办事处")
    comp2.Add(HRDepartment("南京办事处人力资源部"))
    comp2.Add(FinanceDepartment("南京公司财务部"))
    root.Add(comp2)
    # comp.Add(comp2)  # 个人觉得注释 52和57行 结构更清楚
    # root.Add(comp)
    print("公司结构图")
    root.Display(1)
    print("部门职责")
    root.LineOfDuty()

  • 相关阅读:
    openCR-用ROS代码获取电压的方法
    openCR-用ROS代码控制按键的方法
    TurtleBot3-基础例程
    TurtleBot3-键盘远程控制
    TurtleBot3-Topic Monitor
    openCR-串口打印HelloWorld
    Ubuntu播放音乐 mp3 wav
    SQL Server2008创建约束图解 转
    height、clientHeight、scrollHeight、offsetHeight区别
    第一次弄项目有感
  • 原文地址:https://www.cnblogs.com/hanqian/p/7531500.html
Copyright © 2011-2022 走看看