python3 简单实现组合设计模式

作者:知识创造未来 时间:2023-06-12 19:15:50 

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

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

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

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


#根
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)

结果为:

python3 简单实现组合设计模式

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

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

完整代码如下:


#根
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)

来源:https://www.cnblogs.com/cnchemmy/p/13220424.html

标签:Python,组合,设计,模式
0
投稿

猜你喜欢

  • Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法

    2021-06-26 12:42:36
  • 大家一起来折磨浏览器吧!(好玩的东东)

    2010-02-07 12:40:00
  • 简述Python2与Python3的不同点

    2023-03-25 10:22:10
  • 用Python写一个简易版弹球游戏

    2022-02-14 04:03:55
  • 编写和优化SQL Server的存储过程

    2009-04-13 10:13:00
  • 详解Docker创建Mysql容器并通过命令行连接到容器

    2024-01-24 22:25:18
  • python selenium自动上传有赞单号的操作方法

    2023-05-21 13:24:43
  • python3 tcp的粘包现象和解决办法解析

    2022-08-02 02:22:53
  • 10个Python面试常问的问题(小结)

    2023-04-11 19:36:15
  • Python图像特效之模糊玻璃效果

    2022-09-08 11:38:21
  • Python实现的几个常用排序算法实例

    2021-08-13 07:42:54
  • PHP addAttribute()函数讲解

    2023-06-06 09:03:45
  • 微信小程序常用的3种提示弹窗实现详解

    2024-04-18 09:43:39
  • Python pyecharts数据可视化实例详解

    2023-06-28 01:35:30
  • 用PHP将Unicode 转化为UTF-8的实现方法(推荐)

    2024-05-03 15:53:31
  • python+requests+pytest接口自动化的实现示例

    2022-11-01 06:12:27
  • 在PHP3中实现SESSION的功能(二)

    2023-11-17 11:26:52
  • MySQL优化教程之超大分页查询

    2024-01-28 08:30:57
  • 阿里系的中国雅虎新首页浅谈

    2008-07-16 12:19:00
  • 在函数间不能传递32个以上参数的疑难问题

    2008-12-31 13:31:00
  • asp之家 网络编程 m.aspxhome.com