组合模式是把一个类别归为一个整体,并且组织多个整体之间的关系,使用通过树形结构来描述所有整体。

一般的编写方式为一个类别对象下添加多个该对象的元素,该对象又为其它对象下的元素。简单来说就是一个学校有一个总部,总部下有有师资部、招生部;总部有分校,分校也有。

在我个人看来,设计模式的使用并不局限于书本描述的具体问题的解决,是需要丰富的业务经验才能更好的灵活应用,本人能力有限,在此也是给出一个简单的示例用来说明,额外的灵活运营需要看个人的编写方式。

首先新建一个学校的基类:

#根

class root:

name = ''

def __init__(self, name):

self.name = name

def add(self, root):

pass

以上学校基类初始化方法为接收一个name,并且有一个抽象方法add。

有了一个学校基类后,具体新建一个学校类,继承root基类:

#学校类

class School(root):

childrenroot = []

def add(self, root):

self.childrenroot.append(root)

在以上学校类中,继承了root基类,并且实现了add方法,接收root值,并且把它添加到 childrenroot 列表中,这样可以网当前对象下添加子节点,或者说添加下级对象。

新建一个招生办类以及一个师资部类:

#招生办

class StudentAdmissionDept(root):

def __init__(self, name):

self.name = name

#师资部

class FacultyDepartment(root):

def __init__(self, name):

self.name = name

以上内容很简单,都是继承于root,就一个初始化方法。

开始实现调用。首先新建一个学校总部对象,并且往这个总部对象下添加一个招生办对象以及一个师资部对象:

root = School('总部')

root.add(StudentAdmissionDept('总部招生办'))

root.add(FacultyDepartment('总部师资部'))

新建好总部对象后,往下添加分校区的对象。分校区的部门设置跟总校一致:

s1 = School('桂林校区')

s1.add(StudentAdmissionDept('桂林校区 招生办'))

s1.add(FacultyDepartment('桂林校区 师资部'))

root.add(s1)

在配置完第一个桂林校区后,使用root总部的add方法,添加当前桂林校区为下级。

再新建几个校区:

s2 = School('深圳校区')

s2.add(StudentAdmissionDept('深圳校区 招生办'))

s2.add(FacultyDepartment('深圳校区 师资部'))

root.add(s2)

s3 = School('广州校区')

s3.add(StudentAdmissionDept('广州校区 招生办'))

s3.add(FacultyDepartment('广州校区 师资部'))

root.add(s3)

以上配置方法跟第一个校区配置为root总部校区下级一致。

最后使用遍历打印出各个校区的名字:

print('\n',root.name,'下级学校层级:\n')

for i in root.childrenroot:

print(i.name)

结果为:

由于没有排版,以上结果并没有很好的直观显示层级,剩下的只需要自己排版输出即可。

在当前文章对应的代码编写中,最后的新建校区及配置信息,可以新建一个类,封装好该调用、输出方法,可以很方便的使用组合设计模式。

完整代码如下:

#根

class root:

name = ''

def __init__(self, name):

self.name = name

def add(self, root):

pass

#学校类

class School(root):

childrenroot = []

def add(self, root):

self.childrenroot.append(root)

#招生办

class StudentAdmissionDept(root):

def __init__(self, name):

self.name = name

#师资部

class FacultyDepartment(root):

def __init__(self, name):

self.name = name

root = School('总部')

root.add(StudentAdmissionDept('总部招生办'))

root.add(FacultyDepartment('总部师资部'))

s1 = School('桂林校区')

s1.add(StudentAdmissionDept('桂林校区 招生办'))

s1.add(FacultyDepartment('桂林校区 师资部'))

root.add(s1)

s2 = School('深圳校区')

s2.add(StudentAdmissionDept('深圳校区 招生办'))

s2.add(FacultyDepartment('深圳校区 师资部'))

root.add(s2)

s3 = School('广州校区')

s3.add(StudentAdmissionDept('广州校区 招生办'))

s3.add(FacultyDepartment('广州校区 师资部'))

root.add(s3)

print('\n',root.name,'下级学校层级:\n')

for i in root.childrenroot:

print(i.name)

python实现组合问题_python3 最基本且简单的实现组合设计模式相关推荐

  1. python怎么建立画板_Python3使用PyQt5制作简单的画板/手写板实例

    1.前言 版本:Python3.6.1 + PyQt5 写一个程序的时候需要用到画板/手写板,只需要最简单的那种.原以为网上到处都是,结果找了好几天,都没有找到想要的结果. 网上的要么是非python ...

  2. python元组元素删除_Python3基础 通过拆分元素 把元组的数据删除

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体. ------------------------------------- ...

  3. python 工资管理软件_Python3实现的简单工资管理系统示例

    本文实例讲述了Python3实现的简单工资管理系统.分享给大家供大家参考,具体如下: 工资管理系统要求: 1. 查询员工工资 2. 修改员工工资 3. 增加新员工记录 4. 退出 执行代码: #!/u ...

  4. python基础知识及数据分析工具安装及简单使用(Numpy/Scipy/Matplotlib/Pandas/StatsModels/Scikit-Learn/Keras/Gensim))

    Python介绍. Unix & Linux & Window & Mac 平台安装更新 Python3 及VSCode下Python环境配置配置 python基础知识及数据分 ...

  5. 学简单python好学吗_python好学吗? 语法简单吗? 举个例子?

    2009-07-13 回答 pythonPython (发音:[ 'paiθ(ə)n; (US) 'paiθɔn ]n.蟒蛇,巨蛇 ),是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大而完 ...

  6. Python 暴力破解zip文件密码(相对简单的密码)

               Python 暴力破解zip文件密码(相对简单的密码) 密码的使用范围很广,首先,我们要明确密码的作用,其次要明白密码的类型. 密码的作用是进行权限的限制,判断用户的合法性,(不 ...

  7. 基于Python Tkiner、thread与socket实现的简单多人聊天室,在Python中创建TCP服务器与客户端进行通信

    基于Python Tkiner.thread与socket实现的简单多人聊天室,在Python中创建TCP服务器与客户端进行通信 完整代码下载地址:基于Python Tkiner.thread与soc ...

  8. python小项目实例流程-Python小项目:快速开发出一个简单的学生管理系统

    原标题:Python小项目:快速开发出一个简单的学生管理系统 本文根据实际项目中的一部分api 设计抽象出来,实例化成一个简单小例子,暂且叫作「学生管理系统」. 这个系统主要完成下面增删改查的功能: ...

  9. python小项目案例-Python小项目:快速开发出一个简单的学生管理系统

    本文根据实际项目中的一部分api 设计抽象出来,实例化成一个简单小例子,暂且叫作「学生管理系统」. 这个系统主要完成下面增删改查的功能: 包括: 学校信息的管理 教师信息的管理 学生信息的管理 根据A ...

最新文章

  1. 数据结构之C语言模拟整数数组实现
  2. android 代码混淆示例
  3. UA MATH523A 实分析3 积分理论15 乘积测度
  4. Oralce的图形化界面----plsql developer涉及到的知识点总结
  5. 学习java 的30个目标
  6. python oracle 运维,mysql oracle python连接
  7. jsp访问java方法_JSP基础知识之访问JavaBean的方法
  8. SAP CRM WebClient UI recent object的后台存储实现
  9. 童家旺:如何用分表存储来提高性能
  10. 字符串的连接(复习)
  11. Binaural Microphone
  12. CentOS6.5恢复误删除的文件
  13. mongodb linux用户验证登陆,转载:linux下mongodb的用户查询_【Linux】MongoDB创建数据库(开启用户认证)...
  14. 大厂面试必问!疯狂Java讲义第五版pdf在线阅读
  15. 18-2mapreduce的案例加强——好程序
  16. Python语言为何如此流行?
  17. Android 自定义字体
  18. 计算机应用基础——计算机硬件(三)
  19. VLDB 2022最佳研究论文:克服通信挑战,新框架SANCUS实现GNN高效训练
  20. Cycle3-Group1

热门文章

  1. 前端学习(2944):前一天回顾
  2. [vue] vue中是如何使用event对象的?
  3. 前端学习(2338):记录解决问题的一次
  4. 前端学习(1862)vue之电商管理系统电商系统之绘制默认头像
  5. 前端学习(1257):基于promise处理ajax请求
  6. 前端学习(570):margin负值下的等高布局
  7. spring mvc学习(34):restful的delete
  8. 61setproperty对象
  9. 27.用zxing生成二维码
  10. CS144 计算机网络实验 lab3 笔记