时间:2021-05-22
组合模式是把一个类别归为一个整体,并且组织多个整体之间的关系,使用通过树形结构来描述所有整体。
一般的编写方式为一个类别对象下添加多个该对象的元素,该对象又为其它对象下的元素。简单来说就是一个学校有一个总部,总部下有有师资部、招生部;总部有分校,分校也有。
在我个人看来,设计模式的使用并不局限于书本描述的具体问题的解决,是需要丰富的业务经验才能更好的灵活应用,本人能力有限,在此也是给出一个简单的示例用来说明,额外的灵活运营需要看个人的编写方式。
首先新建一个学校的基类:
#根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)以上就是python3 简单实现组合设计模式的详细内容,更多关于Python 实现组合设计模式的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在Python3环境下,调试实现了《大话设计模式》中简单工厂模式,通过定义单独的工厂类,完成对具体的产品的实例化,参考链接具体实现见代码:#!/usr/bin/
我简单的绘制了一下排序算法的分类,蓝色字体的排序算法是我们用python3实现的,也是比较常用的排序算法。Python3常用排序算法1、Python3冒泡排序—
思路改进原博主文章(PythonGUI–Tkinter简单实现个性签名设计)的代码,原先的代码是基于Python2的,我这份代码基于Python3并针对当前的网
本文我们为大家介绍Python3使用PyMySQL连接数据库,并实现简单的增删改查。什么是PyMySQL?PyMySQL是在Python3.x版本中用于连接My
最新的CentOS8已经内置了Python2和Python3,出入Python2和Python3两个命令可以分别进入Python2和Python3。CentOS